ASP.NET Core'daki statik dosyalar 您所在的位置:网站首页 Express ile statik dosyalar ASP.NET Core'daki statik dosyalar

ASP.NET Core'daki statik dosyalar

2024-06-29 15:42| 来源: 网络整理| 查看: 265

ASP.NET Core'daki statik dosyalar Makale06/15/2024

Not

Bu, bu makalenin en son s眉r眉m眉 de臒ildir. Ge莽erli s眉r眉m i莽in bu makalenin .NET 8 s眉r眉m眉ne bak谋n.

Uyar谋

ASP.NET Core'un bu s眉r眉m眉 art谋k desteklenmiyor. Daha fazla bilgi i莽in bkz . .NET ve .NET Core Destek 陌lkesi. Ge莽erli s眉r眉m i莽in bu makalenin .NET 8 s眉r眉m眉ne bak谋n.

脰nemli

Bu bilgiler, ticari olarak piyasaya s眉r眉lmeden 枚nce 枚nemli 枚l莽眉de de臒i艧tirilebilen bir yay谋n 枚ncesi 眉r眉nle ilgilidir. Burada verilen bilgilerle ilgili olarak Microsoft a莽谋k veya z谋mni hi莽bir garanti vermez.

Ge莽erli s眉r眉m i莽in bu makalenin .NET 8 s眉r眉m眉ne bak谋n.

G枚nderen Rick Anderson

HTML, CSS, g枚r眉nt眉ler ve JavaScript gibi statik dosyalar, ASP.NET Core uygulamas谋n谋n varsay谋lan olarak istemcilere do臒rudan hizmet verdi臒i varl谋klard谋r.

Statik dosyalar谋 sunma

Statik dosyalar projenin web k枚k dizininde depolan谋r. Varsay谋lan dizin 艧eklindedir {content root}/wwwroot, ancak y枚ntemiyle UseWebRoot de臒i艧tirilebilir. Daha fazla bilgi i莽in bkz . 陌莽erik k枚k眉 ve Web k枚k眉.

CreateBuilder y枚ntemi, i莽erik k枚k眉n眉 ge莽erli dizine ayarlar:

var builder = WebApplication.CreateBuilder(args); builder.Services.AddRazorPages(); builder.Services.AddControllersWithViews(); var app = builder.Build(); if (!app.Environment.IsDevelopment()) { app.UseExceptionHandler("/Error"); app.UseHsts(); } app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseAuthorization(); app.MapDefaultControllerRoute(); app.MapRazorPages(); app.Run();

Statik dosyalara web k枚k眉ne g枚re bir yol 眉zerinden eri艧ilebilir. 脰rne臒in, Web Uygulamas谋 proje 艧ablonlar谋 klas枚r眉n i莽inde wwwroot birka莽 klas枚r i莽erir:

wwwroot css js lib

wwwroot/images klas枚r眉n眉 olu艧turmay谋 ve dosyay谋 eklemeyi wwwroot/images/MyImage.jpg g枚z 枚n眉nde bulundurun. klas枚r眉ndeki images bir dosyaya eri艧mek i莽in URI bi莽imi 艧eklindedir https:///images/. 脰rne臒in https://localhost:5001/images/MyImage.jpg

MapStaticAssets

MapStaticAssets bir uygulamadaki statik varl谋klar谋n teslimini iyile艧tirmeye yard谋mc谋 olan bir ara yaz谋l谋md谋r. Daha fazla bilgi i莽in bkz . Statik web varl谋臒谋 teslimini iyile艧tirme.

Dosyalar谋 web k枚k眉nde sunma

Varsay谋lan web uygulamas谋 艧ablonlar谋, Program.csstatik dosyalar谋n hizmet vermesine olanak tan谋yan y枚ntemini 莽a臒谋r谋rUseStaticFiles:

var builder = WebApplication.CreateBuilder(args); builder.Services.AddRazorPages(); builder.Services.AddControllersWithViews(); var app = builder.Build(); if (!app.Environment.IsDevelopment()) { app.UseExceptionHandler("/Error"); app.UseHsts(); } app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseAuthorization(); app.MapDefaultControllerRoute(); app.MapRazorPages(); app.Run();

Parametresiz UseStaticFiles y枚ntem a艧谋r谋 y眉klemesi web k枚k眉ndeki dosyalar谋 servable olarak i艧aretler. A艧a臒谋daki i艧aretleme ba艧vurur wwwroot/images/MyImage.jpg:

脰nceki i艧aretlemede tilde karakteri ~ web k枚k眉n眉 i艧aret ediyor.

Dosyalar谋 web k枚k眉 d谋艧谋nda sunma

Hizmet al谋nacak statik dosyalar谋n web k枚k眉 d谋艧谋nda bulundu臒u bir dizin hiyerar艧isi d眉艧眉n眉n:

wwwroot css images js MyStaticFiles images red-rose.jpg

bir istek, Statik Dosya Ara Yaz谋l谋m谋n谋 a艧a臒谋daki gibi yap谋land谋rarak dosyaya eri艧ebilir red-rose.jpg :

using Microsoft.Extensions.FileProviders; var builder = WebApplication.CreateBuilder(args); builder.Services.AddRazorPages(); builder.Services.AddControllersWithViews(); var app = builder.Build(); if (!app.Environment.IsDevelopment()) { app.UseExceptionHandler("/Error"); app.UseHsts(); } app.UseHttpsRedirection(); app.UseStaticFiles(new StaticFileOptions { FileProvider = new PhysicalFileProvider( Path.Combine(builder.Environment.ContentRootPath, "MyStaticFiles")), RequestPath = "/StaticFiles" }); app.UseAuthorization(); app.MapDefaultControllerRoute(); app.MapRazorPages(); app.Run();

Yukar谋daki kodda MyStaticFiles dizin hiyerar艧isi StaticFiles URI kesimi arac谋l谋臒谋yla genel kullan谋ma sunulur. Dosyaya hizmet red-rose.jpg verme https:///StaticFiles/images/red-rose.jpg iste臒i.

A艧a臒谋daki i艧aretleme ba艧vurur MyStaticFiles/images/red-rose.jpg:

Dosyalar谋 birden 莽ok konumdan sunmak i莽in bkz . Birden 莽ok konumdan dosya sunma.

HTTP yan谋t 眉st bilgilerini ayarlama

Nesne StaticFileOptions , HTTP yan谋t 眉st bilgilerini ayarlamak i莽in kullan谋labilir. Web k枚k眉nden statik dosya sunumunu yap谋land谋rmaya ek olarak, a艧a臒谋daki kod 脰nbellek Denetimi 眉st bilgisini ayarlar:

var builder = WebApplication.CreateBuilder(args); builder.Services.AddRazorPages(); builder.Services.AddControllersWithViews(); var app = builder.Build(); if (!app.Environment.IsDevelopment()) { app.UseExceptionHandler("/Error"); app.UseHsts(); } app.UseHttpsRedirection(); var cacheMaxAgeOneWeek = (60 * 60 * 24 * 7).ToString(); app.UseStaticFiles(new StaticFileOptions { OnPrepareResponse = ctx => { ctx.Context.Response.Headers.Append( "Cache-Control", $"public, max-age={cacheMaxAgeOneWeek}"); } }); app.UseAuthorization(); app.MapDefaultControllerRoute(); app.MapRazorPages(); app.Run();

Yukar谋daki kod, statik dosyalar谋 bir hafta (604800 saniye) boyunca yerel 枚nbellekte genel olarak kullan谋labilir hale getirir.

Statik dosya yetkilendirme

ASP.NET Core 艧ablonlar谋 莽a臒r谋s谋ndan 枚nce 枚臒esini 莽a臒谋r谋r UseStaticFilesUseAuthorization. 脟o臒u uygulama bu deseni izler. Statik Dosya Ara Yaz谋l谋m谋 yetkilendirme ara yaz谋l谋m谋ndan 枚nce 莽a臒r谋ld谋臒谋nda:

Statik dosyalarda yetkilendirme denetimi yap谋lmaz. Statik Dosya Ara Yaz谋l谋m谋 taraf谋ndan sunulan statik dosyalara( 枚rne臒in, alt谋ndakilere wwwroot) genel eri艧im sa臒lan谋r.

Yetkilendirmeye dayal谋 statik dosyalar sunmak i莽in:

Bunlar谋 d谋艧谋nda wwwrootdepolay谋n. 莽a臒r谋s谋 UseStaticFilesyapt谋ktan sonra bir yol belirterek 莽a臒r谋s谋nda bulunur UseAuthorization. Geri d枚n眉艧 yetkilendirme ilkesini ayarlay谋n. using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Identity; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.FileProviders; using StaticFileAuth.Data; var builder = WebApplication.CreateBuilder(args); var connectionString = builder.Configuration.GetConnectionString("DefaultConnection"); builder.Services.AddDbContext(options => options.UseSqlServer(connectionString)); builder.Services.AddDatabaseDeveloperPageExceptionFilter(); builder.Services.AddDefaultIdentity(options => options.SignIn.RequireConfirmedAccount = true) .AddEntityFrameworkStores(); builder.Services.AddRazorPages(); builder.Services.AddAuthorization(options => { options.FallbackPolicy = new AuthorizationPolicyBuilder() .RequireAuthenticatedUser() .Build(); }); var app = builder.Build(); if (app.Environment.IsDevelopment()) { app.UseMigrationsEndPoint(); } else { app.UseExceptionHandler("/Error"); app.UseHsts(); } app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseRouting(); app.UseAuthentication(); app.UseAuthorization(); app.UseStaticFiles(new StaticFileOptions { FileProvider = new PhysicalFileProvider( Path.Combine(builder.Environment.ContentRootPath, "MyStaticFiles")), RequestPath = "/StaticFiles" }); app.MapRazorPages(); app.Run();

脰nceki kodda, geri d枚n眉艧 yetkilendirme ilkesi t眉m kullan谋c谋lar谋n kimli臒inin do臒rulanmas谋 gerekir. Kendi yetkilendirme gereksinimlerini belirten denetleyiciler, Razor Sayfalar gibi u莽 noktalar geri d枚n眉艧 yetkilendirme ilkesini kullanmaz. 脰rne臒in Sayfalar, Razor denetleyiciler veya eylem y枚ntemleri geri [AllowAnonymous][Authorize(PolicyName="MyPolicy")] d枚n眉艧 yetkilendirme ilkesi yerine uygulanan yetkilendirme 枚zniteli臒ini kullan谋r.

RequireAuthenticatedUser ge莽erli kullan谋c谋n谋n kimli臒inin do臒ruland谋臒谋n谋 zorlayan ge莽erli 枚rne臒e ekler DenyAnonymousAuthorizationRequirement .

varsay谋lan Statik Dosya Ara Yaz谋l谋m谋 (app.UseStaticFiles();) 枚ncesinde UseAuthentication莽a臒r谋ld谋臒谋ndan alt谋ndaki wwwroot statik varl谋klara genel eri艧im sa臒lan谋r. MyStaticFiles klas枚r眉ndeki statik varl谋klar kimlik do臒rulamas谋 gerektirir. 脰rnek kod bunu g枚sterir.

Dosyalar谋 yetkilendirmeye g枚re sunmak i莽in alternatif bir yakla艧谋m:

Bunlar谋 ve Statik Dosya Ara Yaz谋l谋m谋 taraf谋ndan eri艧ilebilen herhangi bir dizinin d谋艧谋nda wwwroot depolay谋n.

Yetkilendirmenin uyguland谋臒谋 bir eylem y枚ntemi arac谋l谋臒谋yla bunlar谋 sunma ve bir FileResult nesne d枚nd眉rme:

[Authorize] public class BannerImageModel : PageModel { private readonly IWebHostEnvironment _env; public BannerImageModel(IWebHostEnvironment env) => _env = env; public PhysicalFileResult OnGet() { var filePath = Path.Combine( _env.ContentRootPath, "MyStaticFiles", "images", "red-rose.jpg"); return PhysicalFile(filePath, "image/jpeg"); } }

Yukar谋daki yakla艧谋m, dosya ba艧谋na bir sayfa veya u莽 nokta gerektirir. A艧a臒谋daki kod, kimli臒i do臒rulanm谋艧 kullan谋c谋lar i莽in dosyalar谋 d枚nd眉r眉r veya kar艧谋ya y眉kler:

app.MapGet("/files/{fileName}", IResult (string fileName) => { var filePath = GetOrCreateFilePath(fileName); if (File.Exists(filePath)) { return TypedResults.PhysicalFile(filePath, fileDownloadName: $"{fileName}"); } return TypedResults.NotFound("No file found with the supplied file name"); }) .WithName("GetFileByName") .RequireAuthorization("AuthenticatedUsers"); // IFormFile uses memory buffer for uploading. For handling large file use streaming instead. // https://learn.microsoft.com/aspnet/core/mvc/models/file-uploads#upload-large-files-with-streaming app.MapPost("/files", async (IFormFile file, LinkGenerator linker, HttpContext context) => { // Don't rely on the file.FileName as it is only metadata that can be manipulated by the end-user // Take a look at the `Utilities.IsFileValid` method that takes an IFormFile and validates its signature within the AllowedFileSignatures var fileSaveName = Guid.NewGuid().ToString("N") + Path.GetExtension(file.FileName); await SaveFileWithCustomFileName(file, fileSaveName); context.Response.Headers.Append("Location", linker.GetPathByName(context, "GetFileByName", new { fileName = fileSaveName})); return TypedResults.Ok("File Uploaded Successfully!"); }) .RequireAuthorization("AdminsOnly"); app.Run();

Tam 枚rnek i莽in StaticFileAuth GitHub klas枚r眉ne bak谋n.

Dizin tarama

Dizin g枚zatma, belirtilen dizinler i莽inde dizin listelemeye izin verir.

Dizine g枚zatma, g眉venlik nedeniyle varsay谋lan olarak devre d谋艧谋d谋r. Daha fazla bilgi i莽in bkz . Statik dosyalar i莽in g眉venlikle ilgili dikkat edilmesi gerekenler.

ve UseDirectoryBrowserile AddDirectoryBrowser dizin g枚zatmay谋 etkinle艧tirme:

using Microsoft.AspNetCore.StaticFiles; using Microsoft.Extensions.FileProviders; var builder = WebApplication.CreateBuilder(args); builder.Services.AddRazorPages(); builder.Services.AddControllersWithViews(); builder.Services.AddDirectoryBrowser(); var app = builder.Build(); if (!app.Environment.IsDevelopment()) { app.UseExceptionHandler("/Error"); app.UseHsts(); } app.UseHttpsRedirection(); app.UseStaticFiles(); var fileProvider = new PhysicalFileProvider(Path.Combine(builder.Environment.WebRootPath, "images")); var requestPath = "/MyImages"; // Enable displaying browser links. app.UseStaticFiles(new StaticFileOptions { FileProvider = fileProvider, RequestPath = requestPath }); app.UseDirectoryBrowser(new DirectoryBrowserOptions { FileProvider = fileProvider, RequestPath = requestPath }); app.UseAuthorization(); app.MapDefaultControllerRoute(); app.MapRazorPages(); app.Run();

Yukar谋daki kod, url'sini https:///MyImageskullanarak wwwroot/images klas枚r眉n眉n dizine g枚zat谋lmas谋na olanak tan谋r ve her dosya ve klas枚re ba臒lant谋 sa臒lar:

AddDirectoryBrowser, dahil olmak 眉zere HtmlEncoderdizin g枚zatma ara yaz谋l谋m谋n谋n gerektirdi臒i hizmetleri ekler. Bu hizmetler gibi AddRazorPagesdi臒er 莽a臒r谋lar taraf谋ndan eklenebilir, ancak hizmetlerin t眉m uygulamalara eklendi臒inden emin olmak i莽in araman谋z谋 AddDirectoryBrowser 枚neririz.

Varsay谋lan belgeleri sunma

Varsay谋lan sayfay谋 ayarlamak, ziyaret莽ilere sitede bir ba艧lang谋莽 noktas谋 sa臒lar. 陌stek URL'sinin wwwroot dosyan谋n ad谋n谋 i莽ermesine gerek kalmadan dosyas谋ndan varsay谋lan bir dosya sunmak i莽in y枚ntemini 莽a臒谋r谋n UseDefaultFiles :

var builder = WebApplication.CreateBuilder(args); builder.Services.AddRazorPages(); builder.Services.AddControllersWithViews(); var app = builder.Build(); if (!app.Environment.IsDevelopment()) { app.UseExceptionHandler("/Error"); app.UseHsts(); } app.UseHttpsRedirection(); app.UseDefaultFiles(); app.UseStaticFiles(); app.UseAuthorization(); app.MapDefaultControllerRoute(); app.MapRazorPages(); app.Run();

UseDefaultFiles varsay谋lan dosyaya hizmet vermek i莽in 枚nce UseStaticFiles 莽a臒r谋lmal谋d谋r. UseDefaultFiles , dosyaya hizmet i莽ermeyen bir URL yeniden yazma i艧lemidir.

ile UseDefaultFiles, a艧a臒谋dakiler i莽in arama yap谋lan bir klas枚re istekte bulunur wwwroot :

default.htm default.html index.htm index.html

Listeden bulunan ilk dosya, istek dosyan谋n ad谋n谋 i莽eriyormu艧 gibi sunulur. Taray谋c谋 URL'si istenen URI'yi yans谋tmaya devam eder.

A艧a臒谋daki kod, varsay谋lan dosya ad谋n谋 olarak mydefault.htmlde臒i艧tirir:

var builder = WebApplication.CreateBuilder(args); builder.Services.AddRazorPages(); builder.Services.AddControllersWithViews(); var app = builder.Build(); if (!app.Environment.IsDevelopment()) { app.UseExceptionHandler("/Error"); app.UseHsts(); } app.UseHttpsRedirection(); var options = new DefaultFilesOptions(); options.DefaultFileNames.Clear(); options.DefaultFileNames.Add("mydefault.html"); app.UseDefaultFiles(options); app.UseStaticFiles(); app.UseAuthorization(); app.MapDefaultControllerRoute(); app.MapRazorPages(); app.Run(); Varsay谋lan belgeler i莽in UseFileServer

UseFileServer, UseDefaultFilesve i艧levlerini UseStaticFilesiste臒e ba臒l谋 olarak UseDirectoryBrowserbirle艧tirir.

Statik dosyalar谋n ve varsay谋lan dosyan谋n sunulmas谋n谋 etkinle艧tirmek i莽in 莽a臒r谋s谋 app.UseFileServer . Dizine g枚zatma etkin de臒il:

var builder = WebApplication.CreateBuilder(args); builder.Services.AddRazorPages(); builder.Services.AddControllersWithViews(); var app = builder.Build(); if (!app.Environment.IsDevelopment()) { app.UseExceptionHandler("/Error"); app.UseHsts(); } app.UseHttpsRedirection(); app.UseFileServer(); app.UseAuthorization(); app.MapDefaultControllerRoute(); app.MapRazorPages(); app.Run();

A艧a臒谋daki kod statik dosyalar谋n, varsay谋lan dosyan谋n ve dizin taraman谋n sunulmas谋n谋 sa臒lar:

var builder = WebApplication.CreateBuilder(args); builder.Services.AddRazorPages(); builder.Services.AddControllersWithViews(); builder.Services.AddDirectoryBrowser(); var app = builder.Build(); if (!app.Environment.IsDevelopment()) { app.UseExceptionHandler("/Error"); app.UseHsts(); } app.UseHttpsRedirection(); app.UseFileServer(enableDirectoryBrowsing: true); app.UseRouting(); app.UseAuthorization(); app.MapDefaultControllerRoute(); app.MapRazorPages(); app.Run();

A艧a臒谋daki dizin hiyerar艧isini g枚z 枚n眉nde bulundurun:

wwwroot css images js MyStaticFiles images MyImage.jpg default.html

A艧a臒谋daki kod statik dosyalar谋n sunulmas谋n谋, varsay谋lan dosyan谋n ve dizinine g枚z atmay谋 MyStaticFilesetkinle艧tirir:

using Microsoft.Extensions.FileProviders; var builder = WebApplication.CreateBuilder(args); builder.Services.AddRazorPages(); builder.Services.AddControllersWithViews(); builder.Services.AddDirectoryBrowser(); var app = builder.Build(); if (!app.Environment.IsDevelopment()) { app.UseExceptionHandler("/Error"); app.UseHsts(); } app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseFileServer(new FileServerOptions { FileProvider = new PhysicalFileProvider( Path.Combine(builder.Environment.ContentRootPath, "MyStaticFiles")), RequestPath = "/StaticFiles", EnableDirectoryBrowsing = true }); app.UseAuthorization(); app.MapDefaultControllerRoute(); app.MapRazorPages(); app.Run();

AddDirectoryBrowser 枚zellik de臒eri oldu臒unda EnableDirectoryBrowsingtrue莽a臒r谋lmal谋d谋r.

Yukar谋daki dosya hiyerar艧isini ve kodunu kullanarak URL'ler a艧a臒谋daki gibi 莽枚z眉mlenir:

URI Response https:///StaticFiles/images/MyImage.jpg MyStaticFiles/images/MyImage.jpg https:///StaticFiles MyStaticFiles/default.html

MyStaticFiles dizininde varsay谋lan adland谋r谋lm谋艧 dosya yoksa, https:///StaticFiles t谋klanabilir ba臒lant谋larla dizin listesini d枚nd眉r眉r:

UseDefaultFiles ve UseDirectoryBrowser sonunda bir ile hedef URI'ye iz b谋rakmadan / hedef URI'den istemci taraf谋 yeniden y枚nlendirmesi ger莽ekle艧tirin /. 脰rne臒in, uygulamas谋ndan https:///StaticFiles 枚臒esine.https:///StaticFiles/ StaticFiles dizinindeki g枚reli URL'ler, se莽ene臒i DefaultFilesOptions kullan谋lmad谋臒谋 s眉rece sonunda e臒ik 莽izgi (/) olmadan RedirectToAppendTrailingSlash ge莽ersizdir.

FileExtensionContentTypeProvider

s谋n谋f谋, FileExtensionContentTypeProvider dosya uzant谋lar谋n谋n MIME i莽erik t眉rlerine e艧lemesi olarak hizmet veren bir Mappings 枚zellik i莽erir. A艧a臒谋daki 枚rnekte, bilinen MIME t眉rlerine birka莽 dosya uzant谋s谋 e艧lenmi艧tir. .rtf uzant谋s谋 de臒i艧tirilir ve .mp4 kald谋r谋l谋r:

using Microsoft.AspNetCore.StaticFiles; using Microsoft.Extensions.FileProviders; var builder = WebApplication.CreateBuilder(args); builder.Services.AddRazorPages(); builder.Services.AddControllersWithViews(); var app = builder.Build(); if (!app.Environment.IsDevelopment()) { app.UseExceptionHandler("/Error"); app.UseHsts(); } app.UseHttpsRedirection(); // Set up custom content types - associating file extension to MIME type var provider = new FileExtensionContentTypeProvider(); // Add new mappings provider.Mappings[".myapp"] = "application/x-msdownload"; provider.Mappings[".htm3"] = "text/html"; provider.Mappings[".image"] = "image/png"; // Replace an existing mapping provider.Mappings[".rtf"] = "application/x-msdownload"; // Remove MP4 videos. provider.Mappings.Remove(".mp4"); app.UseStaticFiles(new StaticFileOptions { ContentTypeProvider = provider }); app.UseAuthorization(); app.MapDefaultControllerRoute(); app.MapRazorPages(); app.Run();

Bkz. MIME i莽erik t眉rleri.

Standart olmayan i莽erik t眉rleri

Statik Dosya Ara Yaz谋l谋m谋, neredeyse 400 bilinen dosya i莽erik t眉r眉n眉 anlar. Kullan谋c谋 bilinmeyen bir dosya t眉r眉ne sahip bir dosya isterse, Statik Dosya Ara Yaz谋l谋m谋 iste臒i i艧lem hatt谋ndaki bir sonraki ara yaz谋l谋ma ge莽irir. 陌ste臒i i艧leyen ara yaz谋l谋m yoksa 404 Bulunamad谋 yan谋t谋 d枚nd眉r眉l眉r. Dizine g枚zatma etkinse, dizin listesinde dosyan谋n ba臒lant谋s谋 g枚r眉nt眉lenir.

A艧a臒谋daki kod bilinmeyen t眉rlerin sunulmas谋n谋 sa臒lar ve bilinmeyen dosyay谋 g枚r眉nt眉 olarak i艧ler:

var builder = WebApplication.CreateBuilder(args); builder.Services.AddRazorPages(); builder.Services.AddControllersWithViews(); var app = builder.Build(); if (!app.Environment.IsDevelopment()) { app.UseExceptionHandler("/Error"); app.UseHsts(); } app.UseHttpsRedirection(); app.UseStaticFiles(new StaticFileOptions { ServeUnknownFileTypes = true, DefaultContentType = "image/png" }); app.UseAuthorization(); app.MapDefaultControllerRoute(); app.MapRazorPages(); app.Run();

Yukar谋daki kodla, bilinmeyen i莽erik t眉r眉ne sahip bir dosya iste臒i g枚r眉nt眉 olarak d枚nd眉r眉l眉r.

Uyar谋

ServeUnknownFileTypes Etkinle艧tirme bir g眉venlik riskidir. Varsay谋lan olarak devre d谋艧谋d谋r ve kullan谋m谋 枚nerilmez. FileExtensionContentTypeProvider , standart olmayan uzant谋larla dosya sunman谋n daha g眉venli bir alternatifidir.

Dosyalar谋 birden 莽ok konumdan sunma

Dosyay谋 g枚r眉nt眉leyen a艧a臒谋daki Razor sayfay谋 /MyStaticFiles/image3.png g枚z 枚n眉nde bulundurun:

@page

Test /MyStaticFiles/image3.png

UseStaticFiles ve UseFileServer varsay谋lan olarak 枚臒esini i艧aret eden dosya sa臒lay谋c谋s谋na t谋klay谋n wwwroot. Ve'nin UseStaticFilesUseFileServer ek 枚rnekleri, di臒er konumlardaki dosyalar谋 sunmak i莽in di臒er dosya sa臒lay谋c谋lar谋yla birlikte sa臒lanabilir. A艧a臒谋daki 枚rnekte, hem hem MyStaticFilesde wwwroot kaynaklar谋ndan dosya sunmak i莽in iki kez 莽a臒r谋 yap谋l谋rUseStaticFiles:

app.UseStaticFiles(); // Serve files from wwwroot app.UseStaticFiles(new StaticFileOptions { FileProvider = new PhysicalFileProvider( Path.Combine(builder.Environment.ContentRootPath, "MyStaticFiles")) });

脰nceki kodu kullanarak:

Dosya /MyStaticFiles/image3.png g枚r眉nt眉lenir. Etiket Yard谋mc谋lar谋AppendVersion 枚臒esine ba臒l谋 WebRootFileProvideroldu臒undan G枚r眉nt眉 Etiketi Yard谋mc谋lar谋 uygulanmaz. WebRootFileProvider klas枚r眉 i莽erecek MyStaticFiles 艧ekilde g眉ncelle艧tirilmedi.

A艧a臒谋daki kod, G枚r眉nt眉 Etiketi Yard谋mc谋s谋'n谋n bir s眉r眉m sa臒lamas谋na olanak tan谋yan 枚臒esini g眉ncelle艧tirir WebRootFileProvider:

var webRootProvider = new PhysicalFileProvider(builder.Environment.WebRootPath); var newPathProvider = new PhysicalFileProvider( Path.Combine(builder.Environment.ContentRootPath, "MyStaticFiles")); var compositeProvider = new CompositeFileProvider(webRootProvider, newPathProvider); // Update the default provider. app.Environment.WebRootFileProvider = compositeProvider; app.UseStaticFiles();

Statik dosyalar i莽in g眉venlikle ilgili dikkat edilmesi gerekenler

Uyar谋

UseDirectoryBrowser ve UseStaticFiles gizli dizileri s谋zd谋rabilir. 脺retimde dizine g枚zatmay谋 devre d谋艧谋 b谋rakmak kesinlikle 枚nerilir. veya UseDirectoryBrowserarac谋l谋臒谋yla UseStaticFiles hangi dizinlerin etkinle艧tirildi臒ini dikkatle g枚zden ge莽irin. T眉m dizin ve alt dizinleri genel olarak eri艧ilebilir hale gelir. Genel kullan谋ma sunulmas谋 i莽in uygun dosyalar谋 gibi /wwwrootayr谋lm谋艧 bir dizinde depolay谋n. Bu dosyalar谋 MVC g枚r眉n眉mlerinden, Sayfalardan, Razor yap谋land谋rma dosyalar谋ndan vb. ay谋r谋n.

ile UseDirectoryBrowserUseStaticFiles kullan谋ma sunulan i莽erik URL'leri, temel al谋nan dosya sisteminin b眉y眉k/k眉莽眉k harf duyarl谋l谋臒谋na ve karakter k谋s谋tlamalar谋na tabidir. 脰rne臒in, Windows b眉y眉k/k眉莽眉k harfe duyarl谋 de臒ildir, ancak macOS ve Linux de臒ildir.

IIS'de bar谋nd谋r谋lan ASP.NET Core uygulamalar谋, statik dosya istekleri de dahil olmak 眉zere t眉m istekleri uygulamaya iletmek i莽in ASP.NET 脟ekirdek Mod眉l眉n眉 kullan谋r. IIS statik dosya i艧leyicisi kullan谋lmaz ve istekleri i艧leme 艧ans谋 yoktur.

IIS statik dosya i艧leyicisini sunucu veya web sitesi d眉zeyinde kald谋rmak i莽in IIS Y枚neticisi'nde a艧a臒谋daki ad谋mlar谋 tamamlay谋n:

Mod眉ller 枚zelli臒ine gidin. Listede StaticFileModule 枚臒esini se莽in. Eylemler kenar 莽ubu臒unda Kald谋r'a t谋klay谋n.

Uyar谋

IIS statik dosya i艧leyicisi etkinse ve ASP.NET 脟ekirdek Mod眉l眉 yanl谋艧 yap谋land谋r谋ld谋ysa, statik dosyalar sunulur. Bu, 枚rne臒in web.config dosyas谋 da臒谋t谋lmad谋ysa ger莽ekle艧ir.

ve .cshtmldahil olmak 眉zere .cs kod dosyalar谋n谋 uygulama projesinin web k枚k眉n眉n d谋艧谋na yerle艧tirin. Bu nedenle uygulaman谋n istemci taraf谋 i莽eri臒iyle sunucu tabanl谋 kod aras谋nda mant谋ksal bir ayr谋m olu艧turulur. Bu, sunucu taraf谋 kodun s谋zd谋r谋lmas谋n谋 枚nler. IWebHostEnvironment.WebRootPath'i g眉ncelle艧tirerek wwwroot d谋艧谋nda dosya sunma

d谋艧谋nda IWebHostEnvironment.WebRootPath bir klas枚re wwwrootayarland谋臒谋nda:

Geli艧tirme ortam谋nda, hem hem de wwwroot g眉ncelle艧tirilmi艧 IWebHostEnvironment.WebRootPath i莽inde bulunan statik varl谋klar'dan wwwrootsunulur. Geli艧tirme d谋艧谋ndaki herhangi bir ortamda, g眉ncelle艧tirilmi艧 IWebHostEnvironment.WebRootPath klas枚rden yinelenen statik varl谋klar sunulur.

Bo艧 web 艧ablonuyla olu艧turulmu艧 bir web uygulamas谋n谋 d眉艧眉n眉n:

ve wwwroot-customi莽inde wwwroot bir Index.html dosya i莽erir.

Ayarlayan WebRootPath = "wwwroot-custom"a艧a臒谋daki g眉ncelle艧tirilmi艧 Program.cs dosyayla:

var builder = WebApplication.CreateBuilder(new WebApplicationOptions { Args = args, // Look for static files in "wwwroot-custom" WebRootPath = "wwwroot-custom" }); var app = builder.Build(); app.UseDefaultFiles(); app.UseStaticFiles(); app.Run();

Yukar谋daki kodda, istekleri:/

Geli艧tirme ortam谋nda d枚n眉艧 wwwroot/Index.html Geli艧tirme getirisi d谋艧谋ndaki herhangi bir ortamda wwwroot-custom/Index.html

varl谋klar谋n谋n wwwroot-custom d枚nd眉r眉lmesini sa臒lamak i莽in a艧a臒谋daki yakla艧谋mlardan birini kullan谋n:

i莽indeki wwwrootyinelenen adland谋r谋lm谋艧 varl谋klar谋 silin.

Properties/launchSettings.json d谋艧谋nda bir de臒ere "Development"ayarlay谋n"ASPNETCORE_ENVIRONMENT".

Proje dosyas谋nda ayarlayarak false statik web varl谋klar谋n谋 tamamen devre d谋艧谋 b谋rak谋n. UYARI, statik web varl谋klar谋n谋 devre d谋艧谋 b谋rakmak S谋n谋f Kitapl谋klar谋n谋 Razordevre d谋艧谋 b谋rak谋r.

Proje dosyas谋na a艧a臒谋daki JSON 枚臒esini ekleyin:

A艧a臒谋daki kod geli艧tirme olmayan bir de臒ere g眉ncelle艧tirilir IWebHostEnvironment.WebRootPath ve yerine yinelenen i莽eri臒in d枚nd眉r眉lme wwwroot-customwwwrootgarantisi verilir:

var builder = WebApplication.CreateBuilder(new WebApplicationOptions { Args = args, // Examine Hosting environment: logging value EnvironmentName = Environments.Staging, WebRootPath = "wwwroot-custom" }); var app = builder.Build(); app.Logger.LogInformation("ASPNETCORE_ENVIRONMENT: {env}", Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT")); app.Logger.LogInformation("app.Environment.IsDevelopment(): {env}", app.Environment.IsDevelopment().ToString()); app.UseDefaultFiles(); app.UseStaticFiles(); app.Run(); Ek kaynaklar 脰rnek kodu g枚r眉nt眉leme veya indirme (indirme) Ara Yaz谋l谋m ASP.NET Core'a giri艧

G枚nderen Rick Anderson

HTML, CSS, g枚r眉nt眉ler ve JavaScript gibi statik dosyalar, ASP.NET Core uygulamas谋n谋n varsay谋lan olarak istemcilere do臒rudan hizmet verdi臒i varl谋klard谋r.

Statik dosyalar谋 sunma

Statik dosyalar projenin web k枚k dizininde depolan谋r. Varsay谋lan dizin 艧eklindedir {content root}/wwwroot, ancak y枚ntemiyle UseWebRoot de臒i艧tirilebilir. Daha fazla bilgi i莽in bkz . 陌莽erik k枚k眉 ve Web k枚k眉.

CreateBuilder y枚ntemi, i莽erik k枚k眉n眉 ge莽erli dizine ayarlar:

var builder = WebApplication.CreateBuilder(args); builder.Services.AddRazorPages(); builder.Services.AddControllersWithViews(); var app = builder.Build(); if (!app.Environment.IsDevelopment()) { app.UseExceptionHandler("/Error"); app.UseHsts(); } app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseAuthorization(); app.MapDefaultControllerRoute(); app.MapRazorPages(); app.Run();

Statik dosyalara web k枚k眉ne g枚re bir yol 眉zerinden eri艧ilebilir. 脰rne臒in, Web Uygulamas谋 proje 艧ablonlar谋 klas枚r眉n i莽inde wwwroot birka莽 klas枚r i莽erir:

wwwroot css js lib

wwwroot/images klas枚r眉n眉 olu艧turmay谋 ve dosyay谋 eklemeyi wwwroot/images/MyImage.jpg g枚z 枚n眉nde bulundurun. klas枚r眉ndeki images bir dosyaya eri艧mek i莽in URI bi莽imi 艧eklindedir https:///images/. 脰rne臒in https://localhost:5001/images/MyImage.jpg

Dosyalar谋 web k枚k眉nde sunma

Varsay谋lan web uygulamas谋 艧ablonlar谋, Program.csstatik dosyalar谋n hizmet vermesine olanak tan谋yan y枚ntemini 莽a臒谋r谋rUseStaticFiles:

var builder = WebApplication.CreateBuilder(args); builder.Services.AddRazorPages(); builder.Services.AddControllersWithViews(); var app = builder.Build(); if (!app.Environment.IsDevelopment()) { app.UseExceptionHandler("/Error"); app.UseHsts(); } app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseAuthorization(); app.MapDefaultControllerRoute(); app.MapRazorPages(); app.Run();

Parametresiz UseStaticFiles y枚ntem a艧谋r谋 y眉klemesi web k枚k眉ndeki dosyalar谋 servable olarak i艧aretler. A艧a臒谋daki i艧aretleme ba艧vurur wwwroot/images/MyImage.jpg:

脰nceki i艧aretlemede tilde karakteri ~ web k枚k眉n眉 i艧aret ediyor.

Dosyalar谋 web k枚k眉 d谋艧谋nda sunma

Hizmet al谋nacak statik dosyalar谋n web k枚k眉 d谋艧谋nda bulundu臒u bir dizin hiyerar艧isi d眉艧眉n眉n:

wwwroot css images js MyStaticFiles images red-rose.jpg

bir istek, Statik Dosya Ara Yaz谋l谋m谋n谋 a艧a臒谋daki gibi yap谋land谋rarak dosyaya eri艧ebilir red-rose.jpg :

using Microsoft.Extensions.FileProviders; var builder = WebApplication.CreateBuilder(args); builder.Services.AddRazorPages(); builder.Services.AddControllersWithViews(); var app = builder.Build(); if (!app.Environment.IsDevelopment()) { app.UseExceptionHandler("/Error"); app.UseHsts(); } app.UseHttpsRedirection(); app.UseStaticFiles(new StaticFileOptions { FileProvider = new PhysicalFileProvider( Path.Combine(builder.Environment.ContentRootPath, "MyStaticFiles")), RequestPath = "/StaticFiles" }); app.UseAuthorization(); app.MapDefaultControllerRoute(); app.MapRazorPages(); app.Run();

Yukar谋daki kodda MyStaticFiles dizin hiyerar艧isi StaticFiles URI kesimi arac谋l谋臒谋yla genel kullan谋ma sunulur. Dosyaya hizmet red-rose.jpg verme https:///StaticFiles/images/red-rose.jpg iste臒i.

A艧a臒谋daki i艧aretleme ba艧vurur MyStaticFiles/images/red-rose.jpg:

Dosyalar谋 birden 莽ok konumdan sunmak i莽in bkz . Birden 莽ok konumdan dosya sunma.

HTTP yan谋t 眉st bilgilerini ayarlama

Nesne StaticFileOptions , HTTP yan谋t 眉st bilgilerini ayarlamak i莽in kullan谋labilir. Web k枚k眉nden statik dosya sunumunu yap谋land谋rmaya ek olarak, a艧a臒谋daki kod 脰nbellek Denetimi 眉st bilgisini ayarlar:

var builder = WebApplication.CreateBuilder(args); builder.Services.AddRazorPages(); builder.Services.AddControllersWithViews(); var app = builder.Build(); if (!app.Environment.IsDevelopment()) { app.UseExceptionHandler("/Error"); app.UseHsts(); } app.UseHttpsRedirection(); var cacheMaxAgeOneWeek = (60 * 60 * 24 * 7).ToString(); app.UseStaticFiles(new StaticFileOptions { OnPrepareResponse = ctx => { ctx.Context.Response.Headers.Append( "Cache-Control", $"public, max-age={cacheMaxAgeOneWeek}"); } }); app.UseAuthorization(); app.MapDefaultControllerRoute(); app.MapRazorPages(); app.Run();

Yukar谋daki kod, statik dosyalar谋 bir hafta (604800 saniye) boyunca yerel 枚nbellekte genel olarak kullan谋labilir hale getirir.

Statik dosya yetkilendirme

ASP.NET Core 艧ablonlar谋 莽a臒r谋s谋ndan 枚nce 枚臒esini 莽a臒谋r谋r UseStaticFilesUseAuthorization. 脟o臒u uygulama bu deseni izler. Statik Dosya Ara Yaz谋l谋m谋 yetkilendirme ara yaz谋l谋m谋ndan 枚nce 莽a臒r谋ld谋臒谋nda:

Statik dosyalarda yetkilendirme denetimi yap谋lmaz. Statik Dosya Ara Yaz谋l谋m谋 taraf谋ndan sunulan statik dosyalara( 枚rne臒in, alt谋ndakilere wwwroot) genel eri艧im sa臒lan谋r.

Yetkilendirmeye dayal谋 statik dosyalar sunmak i莽in:

Bunlar谋 d谋艧谋nda wwwrootdepolay谋n. 莽a臒r谋s谋 UseStaticFilesyapt谋ktan sonra bir yol belirterek 莽a臒r谋s谋nda bulunur UseAuthorization. Geri d枚n眉艧 yetkilendirme ilkesini ayarlay谋n. using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Identity; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.FileProviders; using StaticFileAuth.Data; var builder = WebApplication.CreateBuilder(args); var connectionString = builder.Configuration.GetConnectionString("DefaultConnection"); builder.Services.AddDbContext(options => options.UseSqlServer(connectionString)); builder.Services.AddDatabaseDeveloperPageExceptionFilter(); builder.Services.AddDefaultIdentity(options => options.SignIn.RequireConfirmedAccount = true) .AddEntityFrameworkStores(); builder.Services.AddRazorPages(); builder.Services.AddAuthorization(options => { options.FallbackPolicy = new AuthorizationPolicyBuilder() .RequireAuthenticatedUser() .Build(); }); var app = builder.Build(); if (app.Environment.IsDevelopment()) { app.UseMigrationsEndPoint(); } else { app.UseExceptionHandler("/Error"); app.UseHsts(); } app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseRouting(); app.UseAuthentication(); app.UseAuthorization(); app.UseStaticFiles(new StaticFileOptions { FileProvider = new PhysicalFileProvider( Path.Combine(builder.Environment.ContentRootPath, "MyStaticFiles")), RequestPath = "/StaticFiles" }); app.MapRazorPages(); app.Run();

脰nceki kodda, geri d枚n眉艧 yetkilendirme ilkesi t眉m kullan谋c谋lar谋n kimli臒inin do臒rulanmas谋 gerekir. Kendi yetkilendirme gereksinimlerini belirten denetleyiciler, Razor Sayfalar gibi u莽 noktalar geri d枚n眉艧 yetkilendirme ilkesini kullanmaz. 脰rne臒in Sayfalar, Razor denetleyiciler veya eylem y枚ntemleri geri [AllowAnonymous][Authorize(PolicyName="MyPolicy")] d枚n眉艧 yetkilendirme ilkesi yerine uygulanan yetkilendirme 枚zniteli臒ini kullan谋r.

RequireAuthenticatedUser ge莽erli kullan谋c谋n谋n kimli臒inin do臒ruland谋臒谋n谋 zorlayan ge莽erli 枚rne臒e ekler DenyAnonymousAuthorizationRequirement .

varsay谋lan Statik Dosya Ara Yaz谋l谋m谋 (app.UseStaticFiles();) 枚ncesinde UseAuthentication莽a臒r谋ld谋臒谋ndan alt谋ndaki wwwroot statik varl谋klara genel eri艧im sa臒lan谋r. MyStaticFiles klas枚r眉ndeki statik varl谋klar kimlik do臒rulamas谋 gerektirir. 脰rnek kod bunu g枚sterir.

Dosyalar谋 yetkilendirmeye g枚re sunmak i莽in alternatif bir yakla艧谋m:

Bunlar谋 ve Statik Dosya Ara Yaz谋l谋m谋 taraf谋ndan eri艧ilebilen herhangi bir dizinin d谋艧谋nda wwwroot depolay谋n.

Yetkilendirmenin uyguland谋臒谋 bir eylem y枚ntemi arac谋l谋臒谋yla bunlar谋 sunma ve bir FileResult nesne d枚nd眉rme:

[Authorize] public class BannerImageModel : PageModel { private readonly IWebHostEnvironment _env; public BannerImageModel(IWebHostEnvironment env) => _env = env; public PhysicalFileResult OnGet() { var filePath = Path.Combine( _env.ContentRootPath, "MyStaticFiles", "images", "red-rose.jpg"); return PhysicalFile(filePath, "image/jpeg"); } }

Yukar谋daki yakla艧谋m, dosya ba艧谋na bir sayfa veya u莽 nokta gerektirir. A艧a臒谋daki kod, kimli臒i do臒rulanm谋艧 kullan谋c谋lar i莽in dosyalar谋 d枚nd眉r眉r veya kar艧谋ya y眉kler:

app.MapGet("/files/{fileName}", IResult (string fileName) => { var filePath = GetOrCreateFilePath(fileName); if (File.Exists(filePath)) { return TypedResults.PhysicalFile(filePath, fileDownloadName: $"{fileName}"); } return TypedResults.NotFound("No file found with the supplied file name"); }) .WithName("GetFileByName") .RequireAuthorization("AuthenticatedUsers"); // IFormFile uses memory buffer for uploading. For handling large file use streaming instead. // https://learn.microsoft.com/aspnet/core/mvc/models/file-uploads#upload-large-files-with-streaming app.MapPost("/files", async (IFormFile file, LinkGenerator linker, HttpContext context) => { // Don't rely on the file.FileName as it is only metadata that can be manipulated by the end-user // Take a look at the `Utilities.IsFileValid` method that takes an IFormFile and validates its signature within the AllowedFileSignatures var fileSaveName = Guid.NewGuid().ToString("N") + Path.GetExtension(file.FileName); await SaveFileWithCustomFileName(file, fileSaveName); context.Response.Headers.Append("Location", linker.GetPathByName(context, "GetFileByName", new { fileName = fileSaveName})); return TypedResults.Ok("File Uploaded Successfully!"); }) .RequireAuthorization("AdminsOnly"); app.Run();

Tam 枚rnek i莽in StaticFileAuth GitHub klas枚r眉ne bak谋n.

Dizin tarama

Dizin g枚zatma, belirtilen dizinler i莽inde dizin listelemeye izin verir.

Dizine g枚zatma, g眉venlik nedeniyle varsay谋lan olarak devre d谋艧谋d谋r. Daha fazla bilgi i莽in bkz . Statik dosyalar i莽in g眉venlikle ilgili dikkat edilmesi gerekenler.

ve UseDirectoryBrowserile AddDirectoryBrowser dizin g枚zatmay谋 etkinle艧tirme:

using Microsoft.AspNetCore.StaticFiles; using Microsoft.Extensions.FileProviders; var builder = WebApplication.CreateBuilder(args); builder.Services.AddRazorPages(); builder.Services.AddControllersWithViews(); builder.Services.AddDirectoryBrowser(); var app = builder.Build(); if (!app.Environment.IsDevelopment()) { app.UseExceptionHandler("/Error"); app.UseHsts(); } app.UseHttpsRedirection(); app.UseStaticFiles(); var fileProvider = new PhysicalFileProvider(Path.Combine(builder.Environment.WebRootPath, "images")); var requestPath = "/MyImages"; // Enable displaying browser links. app.UseStaticFiles(new StaticFileOptions { FileProvider = fileProvider, RequestPath = requestPath }); app.UseDirectoryBrowser(new DirectoryBrowserOptions { FileProvider = fileProvider, RequestPath = requestPath }); app.UseAuthorization(); app.MapDefaultControllerRoute(); app.MapRazorPages(); app.Run();

Yukar谋daki kod, url'sini https:///MyImageskullanarak wwwroot/images klas枚r眉n眉n dizine g枚zat谋lmas谋na olanak tan谋r ve her dosya ve klas枚re ba臒lant谋 sa臒lar:

AddDirectoryBrowser, dahil olmak 眉zere HtmlEncoderdizin g枚zatma ara yaz谋l谋m谋n谋n gerektirdi臒i hizmetleri ekler. Bu hizmetler gibi AddRazorPagesdi臒er 莽a臒r谋lar taraf谋ndan eklenebilir, ancak hizmetlerin t眉m uygulamalara eklendi臒inden emin olmak i莽in araman谋z谋 AddDirectoryBrowser 枚neririz.

Varsay谋lan belgeleri sunma

Varsay谋lan sayfay谋 ayarlamak, ziyaret莽ilere sitede bir ba艧lang谋莽 noktas谋 sa臒lar. 陌stek URL'sinin wwwroot dosyan谋n ad谋n谋 i莽ermesine gerek kalmadan dosyas谋ndan varsay谋lan bir dosya sunmak i莽in y枚ntemini 莽a臒谋r谋n UseDefaultFiles :

var builder = WebApplication.CreateBuilder(args); builder.Services.AddRazorPages(); builder.Services.AddControllersWithViews(); var app = builder.Build(); if (!app.Environment.IsDevelopment()) { app.UseExceptionHandler("/Error"); app.UseHsts(); } app.UseHttpsRedirection(); app.UseDefaultFiles(); app.UseStaticFiles(); app.UseAuthorization(); app.MapDefaultControllerRoute(); app.MapRazorPages(); app.Run();

UseDefaultFiles varsay谋lan dosyaya hizmet vermek i莽in 枚nce UseStaticFiles 莽a臒r谋lmal谋d谋r. UseDefaultFiles , dosyaya hizmet i莽ermeyen bir URL yeniden yazma i艧lemidir.

ile UseDefaultFiles, a艧a臒谋dakiler i莽in arama yap谋lan bir klas枚re istekte bulunur wwwroot :

default.htm default.html index.htm index.html

Listeden bulunan ilk dosya, istek dosyan谋n ad谋n谋 i莽eriyormu艧 gibi sunulur. Taray谋c谋 URL'si istenen URI'yi yans谋tmaya devam eder.

A艧a臒谋daki kod, varsay谋lan dosya ad谋n谋 olarak mydefault.htmlde臒i艧tirir:

var builder = WebApplication.CreateBuilder(args); builder.Services.AddRazorPages(); builder.Services.AddControllersWithViews(); var app = builder.Build(); if (!app.Environment.IsDevelopment()) { app.UseExceptionHandler("/Error"); app.UseHsts(); } app.UseHttpsRedirection(); var options = new DefaultFilesOptions(); options.DefaultFileNames.Clear(); options.DefaultFileNames.Add("mydefault.html"); app.UseDefaultFiles(options); app.UseStaticFiles(); app.UseAuthorization(); app.MapDefaultControllerRoute(); app.MapRazorPages(); app.Run(); Varsay谋lan belgeler i莽in UseFileServer

UseFileServer, UseDefaultFilesve i艧levlerini UseStaticFilesiste臒e ba臒l谋 olarak UseDirectoryBrowserbirle艧tirir.

Statik dosyalar谋n ve varsay谋lan dosyan谋n sunulmas谋n谋 etkinle艧tirmek i莽in 莽a臒r谋s谋 app.UseFileServer . Dizine g枚zatma etkin de臒il:

var builder = WebApplication.CreateBuilder(args); builder.Services.AddRazorPages(); builder.Services.AddControllersWithViews(); var app = builder.Build(); if (!app.Environment.IsDevelopment()) { app.UseExceptionHandler("/Error"); app.UseHsts(); } app.UseHttpsRedirection(); app.UseFileServer(); app.UseAuthorization(); app.MapDefaultControllerRoute(); app.MapRazorPages(); app.Run();

A艧a臒谋daki kod statik dosyalar谋n, varsay谋lan dosyan谋n ve dizin taraman谋n sunulmas谋n谋 sa臒lar:

var builder = WebApplication.CreateBuilder(args); builder.Services.AddRazorPages(); builder.Services.AddControllersWithViews(); builder.Services.AddDirectoryBrowser(); var app = builder.Build(); if (!app.Environment.IsDevelopment()) { app.UseExceptionHandler("/Error"); app.UseHsts(); } app.UseHttpsRedirection(); app.UseFileServer(enableDirectoryBrowsing: true); app.UseRouting(); app.UseAuthorization(); app.MapDefaultControllerRoute(); app.MapRazorPages(); app.Run();

A艧a臒谋daki dizin hiyerar艧isini g枚z 枚n眉nde bulundurun:

wwwroot css images js MyStaticFiles images MyImage.jpg default.html

A艧a臒谋daki kod statik dosyalar谋n sunulmas谋n谋, varsay谋lan dosyan谋n ve dizinine g枚z atmay谋 MyStaticFilesetkinle艧tirir:

using Microsoft.Extensions.FileProviders; var builder = WebApplication.CreateBuilder(args); builder.Services.AddRazorPages(); builder.Services.AddControllersWithViews(); builder.Services.AddDirectoryBrowser(); var app = builder.Build(); if (!app.Environment.IsDevelopment()) { app.UseExceptionHandler("/Error"); app.UseHsts(); } app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseFileServer(new FileServerOptions { FileProvider = new PhysicalFileProvider( Path.Combine(builder.Environment.ContentRootPath, "MyStaticFiles")), RequestPath = "/StaticFiles", EnableDirectoryBrowsing = true }); app.UseAuthorization(); app.MapDefaultControllerRoute(); app.MapRazorPages(); app.Run();

AddDirectoryBrowser 枚zellik de臒eri oldu臒unda EnableDirectoryBrowsingtrue莽a臒r谋lmal谋d谋r.

Yukar谋daki dosya hiyerar艧isini ve kodunu kullanarak URL'ler a艧a臒谋daki gibi 莽枚z眉mlenir:

URI Response https:///StaticFiles/images/MyImage.jpg MyStaticFiles/images/MyImage.jpg https:///StaticFiles MyStaticFiles/default.html

MyStaticFiles dizininde varsay谋lan adland谋r谋lm谋艧 dosya yoksa, https:///StaticFiles t谋klanabilir ba臒lant谋larla dizin listesini d枚nd眉r眉r:

UseDefaultFiles ve UseDirectoryBrowser sonunda bir ile hedef URI'ye iz b谋rakmadan / hedef URI'den istemci taraf谋 yeniden y枚nlendirmesi ger莽ekle艧tirin /. 脰rne臒in, uygulamas谋ndan https:///StaticFiles 枚臒esine.https:///StaticFiles/ StaticFiles dizinindeki g枚reli URL'ler, se莽ene臒i DefaultFilesOptions kullan谋lmad谋臒谋 s眉rece sonunda e臒ik 莽izgi (/) olmadan RedirectToAppendTrailingSlash ge莽ersizdir.

FileExtensionContentTypeProvider

s谋n谋f谋, FileExtensionContentTypeProvider dosya uzant谋lar谋n谋n MIME i莽erik t眉rlerine e艧lemesi olarak hizmet veren bir Mappings 枚zellik i莽erir. A艧a臒谋daki 枚rnekte, bilinen MIME t眉rlerine birka莽 dosya uzant谋s谋 e艧lenmi艧tir. .rtf uzant谋s谋 de臒i艧tirilir ve .mp4 kald谋r谋l谋r:

using Microsoft.AspNetCore.StaticFiles; using Microsoft.Extensions.FileProviders; var builder = WebApplication.CreateBuilder(args); builder.Services.AddRazorPages(); builder.Services.AddControllersWithViews(); var app = builder.Build(); if (!app.Environment.IsDevelopment()) { app.UseExceptionHandler("/Error"); app.UseHsts(); } app.UseHttpsRedirection(); // Set up custom content types - associating file extension to MIME type var provider = new FileExtensionContentTypeProvider(); // Add new mappings provider.Mappings[".myapp"] = "application/x-msdownload"; provider.Mappings[".htm3"] = "text/html"; provider.Mappings[".image"] = "image/png"; // Replace an existing mapping provider.Mappings[".rtf"] = "application/x-msdownload"; // Remove MP4 videos. provider.Mappings.Remove(".mp4"); app.UseStaticFiles(new StaticFileOptions { ContentTypeProvider = provider }); app.UseAuthorization(); app.MapDefaultControllerRoute(); app.MapRazorPages(); app.Run();

Bkz. MIME i莽erik t眉rleri.

Standart olmayan i莽erik t眉rleri

Statik Dosya Ara Yaz谋l谋m谋, neredeyse 400 bilinen dosya i莽erik t眉r眉n眉 anlar. Kullan谋c谋 bilinmeyen bir dosya t眉r眉ne sahip bir dosya isterse, Statik Dosya Ara Yaz谋l谋m谋 iste臒i i艧lem hatt谋ndaki bir sonraki ara yaz谋l谋ma ge莽irir. 陌ste臒i i艧leyen ara yaz谋l谋m yoksa 404 Bulunamad谋 yan谋t谋 d枚nd眉r眉l眉r. Dizine g枚zatma etkinse, dizin listesinde dosyan谋n ba臒lant谋s谋 g枚r眉nt眉lenir.

A艧a臒谋daki kod bilinmeyen t眉rlerin sunulmas谋n谋 sa臒lar ve bilinmeyen dosyay谋 g枚r眉nt眉 olarak i艧ler:

var builder = WebApplication.CreateBuilder(args); builder.Services.AddRazorPages(); builder.Services.AddControllersWithViews(); var app = builder.Build(); if (!app.Environment.IsDevelopment()) { app.UseExceptionHandler("/Error"); app.UseHsts(); } app.UseHttpsRedirection(); app.UseStaticFiles(new StaticFileOptions { ServeUnknownFileTypes = true, DefaultContentType = "image/png" }); app.UseAuthorization(); app.MapDefaultControllerRoute(); app.MapRazorPages(); app.Run();

Yukar谋daki kodla, bilinmeyen i莽erik t眉r眉ne sahip bir dosya iste臒i g枚r眉nt眉 olarak d枚nd眉r眉l眉r.

Uyar谋

ServeUnknownFileTypes Etkinle艧tirme bir g眉venlik riskidir. Varsay谋lan olarak devre d谋艧谋d谋r ve kullan谋m谋 枚nerilmez. FileExtensionContentTypeProvider , standart olmayan uzant谋larla dosya sunman谋n daha g眉venli bir alternatifidir.

Dosyalar谋 birden 莽ok konumdan sunma

Dosyay谋 g枚r眉nt眉leyen a艧a臒谋daki Razor sayfay谋 /MyStaticFiles/image3.png g枚z 枚n眉nde bulundurun:

@page

Test /MyStaticFiles/image3.png

UseStaticFiles ve UseFileServer varsay谋lan olarak 枚臒esini i艧aret eden dosya sa臒lay谋c谋s谋na t谋klay谋n wwwroot. Ve'nin UseStaticFilesUseFileServer ek 枚rnekleri, di臒er konumlardaki dosyalar谋 sunmak i莽in di臒er dosya sa臒lay谋c谋lar谋yla birlikte sa臒lanabilir. A艧a臒谋daki 枚rnekte, hem hem MyStaticFilesde wwwroot kaynaklar谋ndan dosya sunmak i莽in iki kez 莽a臒r谋 yap谋l谋rUseStaticFiles:

app.UseStaticFiles(); // Serve files from wwwroot app.UseStaticFiles(new StaticFileOptions { FileProvider = new PhysicalFileProvider( Path.Combine(builder.Environment.ContentRootPath, "MyStaticFiles")) });

脰nceki kodu kullanarak:

Dosya /MyStaticFiles/image3.png g枚r眉nt眉lenir. Etiket Yard谋mc谋lar谋AppendVersion 枚臒esine ba臒l谋 WebRootFileProvideroldu臒undan G枚r眉nt眉 Etiketi Yard谋mc谋lar谋 uygulanmaz. WebRootFileProvider klas枚r眉 i莽erecek MyStaticFiles 艧ekilde g眉ncelle艧tirilmedi.

A艧a臒谋daki kod, G枚r眉nt眉 Etiketi Yard谋mc谋s谋'n谋n bir s眉r眉m sa臒lamas谋na olanak tan谋yan 枚臒esini g眉ncelle艧tirir WebRootFileProvider:

var webRootProvider = new PhysicalFileProvider(builder.Environment.WebRootPath); var newPathProvider = new PhysicalFileProvider( Path.Combine(builder.Environment.ContentRootPath, "MyStaticFiles")); var compositeProvider = new CompositeFileProvider(webRootProvider, newPathProvider); // Update the default provider. app.Environment.WebRootFileProvider = compositeProvider; app.UseStaticFiles();

Statik dosyalar i莽in g眉venlikle ilgili dikkat edilmesi gerekenler

Uyar谋

UseDirectoryBrowser ve UseStaticFiles gizli dizileri s谋zd谋rabilir. 脺retimde dizine g枚zatmay谋 devre d谋艧谋 b谋rakmak kesinlikle 枚nerilir. veya UseDirectoryBrowserarac谋l谋臒谋yla UseStaticFiles hangi dizinlerin etkinle艧tirildi臒ini dikkatle g枚zden ge莽irin. T眉m dizin ve alt dizinleri genel olarak eri艧ilebilir hale gelir. Genel kullan谋ma sunulmas谋 i莽in uygun dosyalar谋 gibi /wwwrootayr谋lm谋艧 bir dizinde depolay谋n. Bu dosyalar谋 MVC g枚r眉n眉mlerinden, Sayfalardan, Razor yap谋land谋rma dosyalar谋ndan vb. ay谋r谋n.

ile UseDirectoryBrowserUseStaticFiles kullan谋ma sunulan i莽erik URL'leri, temel al谋nan dosya sisteminin b眉y眉k/k眉莽眉k harf duyarl谋l谋臒谋na ve karakter k谋s谋tlamalar谋na tabidir. 脰rne臒in, Windows b眉y眉k/k眉莽眉k harfe duyarl谋 de臒ildir, ancak macOS ve Linux de臒ildir.

IIS'de bar谋nd谋r谋lan ASP.NET Core uygulamalar谋, statik dosya istekleri de dahil olmak 眉zere t眉m istekleri uygulamaya iletmek i莽in ASP.NET 脟ekirdek Mod眉l眉n眉 kullan谋r. IIS statik dosya i艧leyicisi kullan谋lmaz ve istekleri i艧leme 艧ans谋 yoktur.

IIS statik dosya i艧leyicisini sunucu veya web sitesi d眉zeyinde kald谋rmak i莽in IIS Y枚neticisi'nde a艧a臒谋daki ad谋mlar谋 tamamlay谋n:

Mod眉ller 枚zelli臒ine gidin. Listede StaticFileModule 枚臒esini se莽in. Eylemler kenar 莽ubu臒unda Kald谋r'a t谋klay谋n.

Uyar谋

IIS statik dosya i艧leyicisi etkinse ve ASP.NET 脟ekirdek Mod眉l眉 yanl谋艧 yap谋land谋r谋ld谋ysa, statik dosyalar sunulur. Bu, 枚rne臒in web.config dosyas谋 da臒谋t谋lmad谋ysa ger莽ekle艧ir.

ve .cshtmldahil olmak 眉zere .cs kod dosyalar谋n谋 uygulama projesinin web k枚k眉n眉n d谋艧谋na yerle艧tirin. Bu nedenle uygulaman谋n istemci taraf谋 i莽eri臒iyle sunucu tabanl谋 kod aras谋nda mant谋ksal bir ayr谋m olu艧turulur. Bu, sunucu taraf谋 kodun s谋zd谋r谋lmas谋n谋 枚nler. IWebHostEnvironment.WebRootPath'i g眉ncelle艧tirerek wwwroot d谋艧谋nda dosya sunma

d谋艧谋nda IWebHostEnvironment.WebRootPath bir klas枚re wwwrootayarland谋臒谋nda:

Geli艧tirme ortam谋nda, hem hem de wwwroot g眉ncelle艧tirilmi艧 IWebHostEnvironment.WebRootPath i莽inde bulunan statik varl谋klar'dan wwwrootsunulur. Geli艧tirme d谋艧谋ndaki herhangi bir ortamda, g眉ncelle艧tirilmi艧 IWebHostEnvironment.WebRootPath klas枚rden yinelenen statik varl谋klar sunulur.

Bo艧 web 艧ablonuyla olu艧turulmu艧 bir web uygulamas谋n谋 d眉艧眉n眉n:

ve wwwroot-customi莽inde wwwroot bir Index.html dosya i莽erir.

Ayarlayan WebRootPath = "wwwroot-custom"a艧a臒谋daki g眉ncelle艧tirilmi艧 Program.cs dosyayla:

var builder = WebApplication.CreateBuilder(new WebApplicationOptions { Args = args, // Look for static files in "wwwroot-custom" WebRootPath = "wwwroot-custom" }); var app = builder.Build(); app.UseDefaultFiles(); app.UseStaticFiles(); app.Run();

Yukar谋daki kodda, istekleri:/

Geli艧tirme ortam谋nda d枚n眉艧 wwwroot/Index.html Geli艧tirme getirisi d谋艧谋ndaki herhangi bir ortamda wwwroot-custom/Index.html

varl谋klar谋n谋n wwwroot-custom d枚nd眉r眉lmesini sa臒lamak i莽in a艧a臒谋daki yakla艧谋mlardan birini kullan谋n:

i莽indeki wwwrootyinelenen adland谋r谋lm谋艧 varl谋klar谋 silin.

Properties/launchSettings.json d谋艧谋nda bir de臒ere "Development"ayarlay谋n"ASPNETCORE_ENVIRONMENT".

Proje dosyas谋nda ayarlayarak false statik web varl谋klar谋n谋 tamamen devre d谋艧谋 b谋rak谋n. UYARI, statik web varl谋klar谋n谋 devre d谋艧谋 b谋rakmak S谋n谋f Kitapl谋klar谋n谋 Razordevre d谋艧谋 b谋rak谋r.

Proje dosyas谋na a艧a臒谋daki JSON 枚臒esini ekleyin:

A艧a臒谋daki kod geli艧tirme olmayan bir de臒ere g眉ncelle艧tirilir IWebHostEnvironment.WebRootPath ve yerine yinelenen i莽eri臒in d枚nd眉r眉lme wwwroot-customwwwrootgarantisi verilir:

var builder = WebApplication.CreateBuilder(new WebApplicationOptions { Args = args, // Examine Hosting environment: logging value EnvironmentName = Environments.Staging, WebRootPath = "wwwroot-custom" }); var app = builder.Build(); app.Logger.LogInformation("ASPNETCORE_ENVIRONMENT: {env}", Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT")); app.Logger.LogInformation("app.Environment.IsDevelopment(): {env}", app.Environment.IsDevelopment().ToString()); app.UseDefaultFiles(); app.UseStaticFiles(); app.Run(); Ek kaynaklar 脰rnek kodu g枚r眉nt眉leme veya indirme (indirme) Ara Yaz谋l谋m ASP.NET Core'a giri艧

Yay谋mlayanlar Rick Anderson ve Kirk Larkin

HTML, CSS, g枚r眉nt眉ler ve JavaScript gibi statik dosyalar, ASP.NET Core uygulamas谋n谋n varsay谋lan olarak istemcilere do臒rudan hizmet verdi臒i varl谋klard谋r.

Statik dosyalar谋 sunma

Statik dosyalar projenin web k枚k dizininde depolan谋r. Varsay谋lan dizin 艧eklindedir {content root}/wwwroot, ancak y枚ntemiyle UseWebRoot de臒i艧tirilebilir. Daha fazla bilgi i莽in bkz . 陌莽erik k枚k眉 ve Web k枚k眉.

CreateBuilder y枚ntemi, i莽erik k枚k眉n眉 ge莽erli dizine ayarlar:

var builder = WebApplication.CreateBuilder(args); builder.Services.AddRazorPages(); builder.Services.AddControllersWithViews(); var app = builder.Build(); if (!app.Environment.IsDevelopment()) { app.UseExceptionHandler("/Error"); app.UseHsts(); } app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseAuthorization(); app.MapDefaultControllerRoute(); app.MapRazorPages(); app.Run();

Statik dosyalara web k枚k眉ne g枚re bir yol 眉zerinden eri艧ilebilir. 脰rne臒in, Web Uygulamas谋 proje 艧ablonlar谋 klas枚r眉n i莽inde wwwroot birka莽 klas枚r i莽erir:

wwwroot css js lib

wwwroot/images klas枚r眉n眉 olu艧turmay谋 ve dosyay谋 eklemeyi wwwroot/images/MyImage.jpg g枚z 枚n眉nde bulundurun. klas枚r眉ndeki images bir dosyaya eri艧mek i莽in URI bi莽imi 艧eklindedir https:///images/. 脰rne臒in https://localhost:5001/images/MyImage.jpg

Dosyalar谋 web k枚k眉nde sunma

Varsay谋lan web uygulamas谋 艧ablonlar谋, Program.csstatik dosyalar谋n hizmet vermesine olanak tan谋yan y枚ntemini 莽a臒谋r谋rUseStaticFiles:

var builder = WebApplication.CreateBuilder(args); builder.Services.AddRazorPages(); builder.Services.AddControllersWithViews(); var app = builder.Build(); if (!app.Environment.IsDevelopment()) { app.UseExceptionHandler("/Error"); app.UseHsts(); } app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseAuthorization(); app.MapDefaultControllerRoute(); app.MapRazorPages(); app.Run();

Parametresiz UseStaticFiles y枚ntem a艧谋r谋 y眉klemesi web k枚k眉ndeki dosyalar谋 servable olarak i艧aretler. A艧a臒谋daki i艧aretleme ba艧vurur wwwroot/images/MyImage.jpg:

脰nceki i艧aretlemede tilde karakteri ~ web k枚k眉n眉 i艧aret ediyor.

Dosyalar谋 web k枚k眉 d谋艧谋nda sunma

Hizmet al谋nacak statik dosyalar谋n web k枚k眉 d谋艧谋nda bulundu臒u bir dizin hiyerar艧isi d眉艧眉n眉n:

wwwroot css images js MyStaticFiles images red-rose.jpg

bir istek, Statik Dosya Ara Yaz谋l谋m谋n谋 a艧a臒谋daki gibi yap谋land谋rarak dosyaya eri艧ebilir red-rose.jpg :

using Microsoft.Extensions.FileProviders; var builder = WebApplication.CreateBuilder(args); builder.Services.AddRazorPages(); builder.Services.AddControllersWithViews(); var app = builder.Build(); if (!app.Environment.IsDevelopment()) { app.UseExceptionHandler("/Error"); app.UseHsts(); } app.UseHttpsRedirection(); app.UseStaticFiles(new StaticFileOptions { FileProvider = new PhysicalFileProvider( Path.Combine(builder.Environment.ContentRootPath, "MyStaticFiles")), RequestPath = "/StaticFiles" }); app.UseAuthorization(); app.MapDefaultControllerRoute(); app.MapRazorPages(); app.Run();

Yukar谋daki kodda MyStaticFiles dizin hiyerar艧isi StaticFiles URI kesimi arac谋l谋臒谋yla genel kullan谋ma sunulur. Dosyaya hizmet red-rose.jpg verme https:///StaticFiles/images/red-rose.jpg iste臒i.

A艧a臒谋daki i艧aretleme ba艧vurur MyStaticFiles/images/red-rose.jpg:

Dosyalar谋 birden 莽ok konumdan sunmak i莽in bkz . Birden 莽ok konumdan dosya sunma.

HTTP yan谋t 眉st bilgilerini ayarlama

Nesne StaticFileOptions , HTTP yan谋t 眉st bilgilerini ayarlamak i莽in kullan谋labilir. Web k枚k眉nden statik dosya sunumunu yap谋land谋rmaya ek olarak, a艧a臒谋daki kod 脰nbellek Denetimi 眉st bilgisini ayarlar:

var builder = WebApplication.CreateBuilder(args); builder.Services.AddRazorPages(); builder.Services.AddControllersWithViews(); var app = builder.Build(); if (!app.Environment.IsDevelopment()) { app.UseExceptionHandler("/Error"); app.UseHsts(); } app.UseHttpsRedirection(); var cacheMaxAgeOneWeek = (60 * 60 * 24 * 7).ToString(); app.UseStaticFiles(new StaticFileOptions { OnPrepareResponse = ctx => { ctx.Context.Response.Headers.Append( "Cache-Control", $"public, max-age={cacheMaxAgeOneWeek}"); } }); app.UseAuthorization(); app.MapDefaultControllerRoute(); app.MapRazorPages(); app.Run();

Yukar谋daki kod, statik dosyalar谋 bir hafta (604800 saniye) boyunca yerel 枚nbellekte genel olarak kullan谋labilir hale getirir.

Statik dosya yetkilendirme

ASP.NET Core 艧ablonlar谋 莽a臒r谋s谋ndan 枚nce 枚臒esini 莽a臒谋r谋r UseStaticFilesUseAuthorization. 脟o臒u uygulama bu deseni izler. Statik Dosya Ara Yaz谋l谋m谋 yetkilendirme ara yaz谋l谋m谋ndan 枚nce 莽a臒r谋ld谋臒谋nda:

Statik dosyalarda yetkilendirme denetimi yap谋lmaz. Statik Dosya Ara Yaz谋l谋m谋 taraf谋ndan sunulan statik dosyalara( 枚rne臒in, alt谋ndakilere wwwroot) genel eri艧im sa臒lan谋r.

Yetkilendirmeye dayal谋 statik dosyalar sunmak i莽in:

Bunlar谋 d谋艧谋nda wwwrootdepolay谋n. 莽a臒r谋s谋 UseStaticFilesyapt谋ktan sonra bir yol belirterek 莽a臒r谋s谋nda bulunur UseAuthorization. Geri d枚n眉艧 yetkilendirme ilkesini ayarlay谋n. using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Identity; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.FileProviders; using StaticFileAuth.Data; var builder = WebApplication.CreateBuilder(args); var connectionString = builder.Configuration.GetConnectionString("DefaultConnection"); builder.Services.AddDbContext(options => options.UseSqlServer(connectionString)); builder.Services.AddDatabaseDeveloperPageExceptionFilter(); builder.Services.AddDefaultIdentity(options => options.SignIn.RequireConfirmedAccount = true) .AddEntityFrameworkStores(); builder.Services.AddRazorPages(); builder.Services.AddAuthorization(options => { options.FallbackPolicy = new AuthorizationPolicyBuilder() .RequireAuthenticatedUser() .Build(); }); var app = builder.Build(); if (app.Environment.IsDevelopment()) { app.UseMigrationsEndPoint(); } else { app.UseExceptionHandler("/Error"); app.UseHsts(); } app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseRouting(); app.UseAuthentication(); app.UseAuthorization(); app.UseStaticFiles(new StaticFileOptions { FileProvider = new PhysicalFileProvider( Path.Combine(builder.Environment.ContentRootPath, "MyStaticFiles")), RequestPath = "/StaticFiles" }); app.MapRazorPages(); app.Run();

脰nceki kodda, geri d枚n眉艧 yetkilendirme ilkesi t眉m kullan谋c谋lar谋n kimli臒inin do臒rulanmas谋 gerekir. Kendi yetkilendirme gereksinimlerini belirten denetleyiciler, Razor Sayfalar gibi u莽 noktalar geri d枚n眉艧 yetkilendirme ilkesini kullanmaz. 脰rne臒in Sayfalar, Razor denetleyiciler veya eylem y枚ntemleri geri [AllowAnonymous][Authorize(PolicyName="MyPolicy")] d枚n眉艧 yetkilendirme ilkesi yerine uygulanan yetkilendirme 枚zniteli臒ini kullan谋r.

RequireAuthenticatedUser ge莽erli kullan谋c谋n谋n kimli臒inin do臒ruland谋臒谋n谋 zorlayan ge莽erli 枚rne臒e ekler DenyAnonymousAuthorizationRequirement .

varsay谋lan Statik Dosya Ara Yaz谋l谋m谋 (app.UseStaticFiles();) 枚ncesinde UseAuthentication莽a臒r谋ld谋臒谋ndan alt谋ndaki wwwroot statik varl谋klara genel eri艧im sa臒lan谋r. MyStaticFiles klas枚r眉ndeki statik varl谋klar kimlik do臒rulamas谋 gerektirir. 脰rnek kod bunu g枚sterir.

Dosyalar谋 yetkilendirmeye g枚re sunmak i莽in alternatif bir yakla艧谋m:

Bunlar谋 ve Statik Dosya Ara Yaz谋l谋m谋 taraf谋ndan eri艧ilebilen herhangi bir dizinin d谋艧谋nda wwwroot depolay谋n. Yetkilendirmenin uyguland谋臒谋 bir eylem y枚ntemi arac谋l谋臒谋yla bunlar谋 sunma ve bir FileResult nesne d枚nd眉rme: [Authorize] public class BannerImageModel : PageModel { private readonly IWebHostEnvironment _env; public BannerImageModel(IWebHostEnvironment env) => _env = env; public PhysicalFileResult OnGet() { var filePath = Path.Combine( _env.ContentRootPath, "MyStaticFiles", "images", "red-rose.jpg"); return PhysicalFile(filePath, "image/jpeg"); } } Dizin tarama

Dizin g枚zatma, belirtilen dizinler i莽inde dizin listelemeye izin verir.

Dizine g枚zatma, g眉venlik nedeniyle varsay谋lan olarak devre d谋艧谋d谋r. Daha fazla bilgi i莽in bkz . Statik dosyalar i莽in g眉venlikle ilgili dikkat edilmesi gerekenler.

ve UseDirectoryBrowserile AddDirectoryBrowser dizin g枚zatmay谋 etkinle艧tirme:

using Microsoft.AspNetCore.StaticFiles; using Microsoft.Extensions.FileProviders; var builder = WebApplication.CreateBuilder(args); builder.Services.AddRazorPages(); builder.Services.AddControllersWithViews(); builder.Services.AddDirectoryBrowser(); var app = builder.Build(); if (!app.Environment.IsDevelopment()) { app.UseExceptionHandler("/Error"); app.UseHsts(); } app.UseHttpsRedirection(); app.UseStaticFiles(); var fileProvider = new PhysicalFileProvider(Path.Combine(builder.Environment.WebRootPath, "images")); var requestPath = "/MyImages"; // Enable displaying browser links. app.UseStaticFiles(new StaticFileOptions { FileProvider = fileProvider, RequestPath = requestPath }); app.UseDirectoryBrowser(new DirectoryBrowserOptions { FileProvider = fileProvider, RequestPath = requestPath }); app.UseAuthorization(); app.MapDefaultControllerRoute(); app.MapRazorPages(); app.Run();

Yukar谋daki kod, url'sini https:///MyImageskullanarak wwwroot/images klas枚r眉n眉n dizine g枚zat谋lmas谋na olanak tan谋r ve her dosya ve klas枚re ba臒lant谋 sa臒lar:

AddDirectoryBrowser, dahil olmak 眉zere HtmlEncoderdizin g枚zatma ara yaz谋l谋m谋n谋n gerektirdi臒i hizmetleri ekler. Bu hizmetler gibi AddRazorPagesdi臒er 莽a臒r谋lar taraf谋ndan eklenebilir, ancak hizmetlerin t眉m uygulamalara eklendi臒inden emin olmak i莽in araman谋z谋 AddDirectoryBrowser 枚neririz.

Varsay谋lan belgeleri sunma

Varsay谋lan sayfay谋 ayarlamak, ziyaret莽ilere sitede bir ba艧lang谋莽 noktas谋 sa臒lar. 陌stek URL'sinin wwwroot dosyan谋n ad谋n谋 i莽ermesine gerek kalmadan dosyas谋ndan varsay谋lan bir dosya sunmak i莽in y枚ntemini 莽a臒谋r谋n UseDefaultFiles :

var builder = WebApplication.CreateBuilder(args); builder.Services.AddRazorPages(); builder.Services.AddControllersWithViews(); var app = builder.Build(); if (!app.Environment.IsDevelopment()) { app.UseExceptionHandler("/Error"); app.UseHsts(); } app.UseHttpsRedirection(); app.UseDefaultFiles(); app.UseStaticFiles(); app.UseAuthorization(); app.MapDefaultControllerRoute(); app.MapRazorPages(); app.Run();

UseDefaultFiles varsay谋lan dosyaya hizmet vermek i莽in 枚nce UseStaticFiles 莽a臒r谋lmal谋d谋r. UseDefaultFiles , dosyaya hizmet i莽ermeyen bir URL yeniden yazma i艧lemidir.

ile UseDefaultFiles, a艧a臒谋dakiler i莽in arama yap谋lan bir klas枚re istekte bulunur wwwroot :

default.htm default.html index.htm index.html

Listeden bulunan ilk dosya, istek dosyan谋n ad谋n谋 i莽eriyormu艧 gibi sunulur. Taray谋c谋 URL'si istenen URI'yi yans谋tmaya devam eder.

A艧a臒谋daki kod, varsay谋lan dosya ad谋n谋 olarak mydefault.htmlde臒i艧tirir:

var builder = WebApplication.CreateBuilder(args); builder.Services.AddRazorPages(); builder.Services.AddControllersWithViews(); var app = builder.Build(); if (!app.Environment.IsDevelopment()) { app.UseExceptionHandler("/Error"); app.UseHsts(); } app.UseHttpsRedirection(); var options = new DefaultFilesOptions(); options.DefaultFileNames.Clear(); options.DefaultFileNames.Add("mydefault.html"); app.UseDefaultFiles(options); app.UseStaticFiles(); app.UseAuthorization(); app.MapDefaultControllerRoute(); app.MapRazorPages(); app.Run(); Varsay谋lan belgeler i莽in UseFileServer

UseFileServer, UseDefaultFilesve i艧levlerini UseStaticFilesiste臒e ba臒l谋 olarak UseDirectoryBrowserbirle艧tirir.

Statik dosyalar谋n ve varsay谋lan dosyan谋n sunulmas谋n谋 etkinle艧tirmek i莽in 莽a臒r谋s谋 app.UseFileServer . Dizine g枚zatma etkin de臒il:

var builder = WebApplication.CreateBuilder(args); builder.Services.AddRazorPages(); builder.Services.AddControllersWithViews(); var app = builder.Build(); if (!app.Environment.IsDevelopment()) { app.UseExceptionHandler("/Error"); app.UseHsts(); } app.UseHttpsRedirection(); app.UseFileServer(); app.UseAuthorization(); app.MapDefaultControllerRoute(); app.MapRazorPages(); app.Run();

A艧a臒谋daki kod statik dosyalar谋n, varsay谋lan dosyan谋n ve dizin taraman谋n sunulmas谋n谋 sa臒lar:

var builder = WebApplication.CreateBuilder(args); builder.Services.AddRazorPages(); builder.Services.AddControllersWithViews(); builder.Services.AddDirectoryBrowser(); var app = builder.Build(); if (!app.Environment.IsDevelopment()) { app.UseExceptionHandler("/Error"); app.UseHsts(); } app.UseHttpsRedirection(); app.UseFileServer(enableDirectoryBrowsing: true); app.UseRouting(); app.UseAuthorization(); app.MapDefaultControllerRoute(); app.MapRazorPages(); app.Run();

A艧a臒谋daki dizin hiyerar艧isini g枚z 枚n眉nde bulundurun:

wwwroot css images js MyStaticFiles images MyImage.jpg default.html

A艧a臒谋daki kod statik dosyalar谋n sunulmas谋n谋, varsay谋lan dosyan谋n ve dizinine g枚z atmay谋 MyStaticFilesetkinle艧tirir:

using Microsoft.Extensions.FileProviders; var builder = WebApplication.CreateBuilder(args); builder.Services.AddRazorPages(); builder.Services.AddControllersWithViews(); builder.Services.AddDirectoryBrowser(); var app = builder.Build(); if (!app.Environment.IsDevelopment()) { app.UseExceptionHandler("/Error"); app.UseHsts(); } app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseFileServer(new FileServerOptions { FileProvider = new PhysicalFileProvider( Path.Combine(builder.Environment.ContentRootPath, "MyStaticFiles")), RequestPath = "/StaticFiles", EnableDirectoryBrowsing = true }); app.UseAuthorization(); app.MapDefaultControllerRoute(); app.MapRazorPages(); app.Run();

AddDirectoryBrowser 枚zellik de臒eri oldu臒unda EnableDirectoryBrowsingtrue莽a臒r谋lmal谋d谋r.

Yukar谋daki dosya hiyerar艧isini ve kodunu kullanarak URL'ler a艧a臒谋daki gibi 莽枚z眉mlenir:

URI Response https:///StaticFiles/images/MyImage.jpg MyStaticFiles/images/MyImage.jpg https:///StaticFiles MyStaticFiles/default.html

MyStaticFiles dizininde varsay谋lan adland谋r谋lm谋艧 dosya yoksa, https:///StaticFiles t谋klanabilir ba臒lant谋larla dizin listesini d枚nd眉r眉r:

UseDefaultFiles ve UseDirectoryBrowser sonunda bir ile hedef URI'ye iz b谋rakmadan / hedef URI'den istemci taraf谋 yeniden y枚nlendirmesi ger莽ekle艧tirin /. 脰rne臒in, uygulamas谋ndan https:///StaticFiles 枚臒esine.https:///StaticFiles/ StaticFiles dizinindeki g枚reli URL'ler, se莽ene臒i DefaultFilesOptions kullan谋lmad谋臒谋 s眉rece sonunda e臒ik 莽izgi (/) olmadan RedirectToAppendTrailingSlash ge莽ersizdir.

FileExtensionContentTypeProvider

s谋n谋f谋, FileExtensionContentTypeProvider dosya uzant谋lar谋n谋n MIME i莽erik t眉rlerine e艧lemesi olarak hizmet veren bir Mappings 枚zellik i莽erir. A艧a臒谋daki 枚rnekte, bilinen MIME t眉rlerine birka莽 dosya uzant谋s谋 e艧lenmi艧tir. .rtf uzant谋s谋 de臒i艧tirilir ve .mp4 kald谋r谋l谋r:

using Microsoft.AspNetCore.StaticFiles; using Microsoft.Extensions.FileProviders; var builder = WebApplication.CreateBuilder(args); builder.Services.AddRazorPages(); builder.Services.AddControllersWithViews(); var app = builder.Build(); if (!app.Environment.IsDevelopment()) { app.UseExceptionHandler("/Error"); app.UseHsts(); } app.UseHttpsRedirection(); // Set up custom content types - associating file extension to MIME type var provider = new FileExtensionContentTypeProvider(); // Add new mappings provider.Mappings[".myapp"] = "application/x-msdownload"; provider.Mappings[".htm3"] = "text/html"; provider.Mappings[".image"] = "image/png"; // Replace an existing mapping provider.Mappings[".rtf"] = "application/x-msdownload"; // Remove MP4 videos. provider.Mappings.Remove(".mp4"); app.UseStaticFiles(new StaticFileOptions { ContentTypeProvider = provider }); app.UseAuthorization(); app.MapDefaultControllerRoute(); app.MapRazorPages(); app.Run();

Bkz. MIME i莽erik t眉rleri.

Standart olmayan i莽erik t眉rleri

Statik Dosya Ara Yaz谋l谋m谋, neredeyse 400 bilinen dosya i莽erik t眉r眉n眉 anlar. Kullan谋c谋 bilinmeyen bir dosya t眉r眉ne sahip bir dosya isterse, Statik Dosya Ara Yaz谋l谋m谋 iste臒i i艧lem hatt谋ndaki bir sonraki ara yaz谋l谋ma ge莽irir. 陌ste臒i i艧leyen ara yaz谋l谋m yoksa 404 Bulunamad谋 yan谋t谋 d枚nd眉r眉l眉r. Dizine g枚zatma etkinse, dizin listesinde dosyan谋n ba臒lant谋s谋 g枚r眉nt眉lenir.

A艧a臒谋daki kod bilinmeyen t眉rlerin sunulmas谋n谋 sa臒lar ve bilinmeyen dosyay谋 g枚r眉nt眉 olarak i艧ler:

var builder = WebApplication.CreateBuilder(args); builder.Services.AddRazorPages(); builder.Services.AddControllersWithViews(); var app = builder.Build(); if (!app.Environment.IsDevelopment()) { app.UseExceptionHandler("/Error"); app.UseHsts(); } app.UseHttpsRedirection(); app.UseStaticFiles(new StaticFileOptions { ServeUnknownFileTypes = true, DefaultContentType = "image/png" }); app.UseAuthorization(); app.MapDefaultControllerRoute(); app.MapRazorPages(); app.Run();

Yukar谋daki kodla, bilinmeyen i莽erik t眉r眉ne sahip bir dosya iste臒i g枚r眉nt眉 olarak d枚nd眉r眉l眉r.

Uyar谋

ServeUnknownFileTypes Etkinle艧tirme bir g眉venlik riskidir. Varsay谋lan olarak devre d谋艧谋d谋r ve kullan谋m谋 枚nerilmez. FileExtensionContentTypeProvider , standart olmayan uzant谋larla dosya sunman谋n daha g眉venli bir alternatifidir.

Dosyalar谋 birden 莽ok konumdan sunma

Dosyay谋 g枚r眉nt眉leyen a艧a臒谋daki Razor sayfay谋 /MyStaticFiles/image3.png g枚z 枚n眉nde bulundurun:

@page

Test /MyStaticFiles/image3.png

UseStaticFiles ve UseFileServer varsay谋lan olarak 枚臒esini i艧aret eden dosya sa臒lay谋c谋s谋na t谋klay谋n wwwroot. Ve'nin UseStaticFilesUseFileServer ek 枚rnekleri, di臒er konumlardaki dosyalar谋 sunmak i莽in di臒er dosya sa臒lay谋c谋lar谋yla birlikte sa臒lanabilir. A艧a臒谋daki 枚rnekte, hem hem MyStaticFilesde wwwroot kaynaklar谋ndan dosya sunmak i莽in iki kez 莽a臒r谋 yap谋l谋rUseStaticFiles:

app.UseStaticFiles(); // Serve files from wwwroot app.UseStaticFiles(new StaticFileOptions { FileProvider = new PhysicalFileProvider( Path.Combine(builder.Environment.ContentRootPath, "MyStaticFiles")) });

脰nceki kodu kullanarak:

Dosya /MyStaticFiles/image3.png g枚r眉nt眉lenir. Etiket Yard谋mc谋lar谋AppendVersion 枚臒esine ba臒l谋 WebRootFileProvideroldu臒undan G枚r眉nt眉 Etiketi Yard谋mc谋lar谋 uygulanmaz. WebRootFileProvider klas枚r眉 i莽erecek MyStaticFiles 艧ekilde g眉ncelle艧tirilmedi.

A艧a臒谋daki kod, G枚r眉nt眉 Etiketi Yard谋mc谋s谋'n谋n bir s眉r眉m sa臒lamas谋na olanak tan谋yan 枚臒esini g眉ncelle艧tirir WebRootFileProvider:

var webRootProvider = new PhysicalFileProvider(builder.Environment.WebRootPath); var newPathProvider = new PhysicalFileProvider( Path.Combine(builder.Environment.ContentRootPath, "MyStaticFiles")); var compositeProvider = new CompositeFileProvider(webRootProvider, newPathProvider); // Update the default provider. app.Environment.WebRootFileProvider = compositeProvider; app.UseStaticFiles();

Statik dosyalar i莽in g眉venlikle ilgili dikkat edilmesi gerekenler

Uyar谋

UseDirectoryBrowser ve UseStaticFiles gizli dizileri s谋zd谋rabilir. 脺retimde dizine g枚zatmay谋 devre d谋艧谋 b谋rakmak kesinlikle 枚nerilir. veya UseDirectoryBrowserarac谋l谋臒谋yla UseStaticFiles hangi dizinlerin etkinle艧tirildi臒ini dikkatle g枚zden ge莽irin. T眉m dizin ve alt dizinleri genel olarak eri艧ilebilir hale gelir. Genel kullan谋ma sunulmas谋 i莽in uygun dosyalar谋 gibi /wwwrootayr谋lm谋艧 bir dizinde depolay谋n. Bu dosyalar谋 MVC g枚r眉n眉mlerinden, Sayfalardan, Razor yap谋land谋rma dosyalar谋ndan vb. ay谋r谋n.

ile UseDirectoryBrowserUseStaticFiles kullan谋ma sunulan i莽erik URL'leri, temel al谋nan dosya sisteminin b眉y眉k/k眉莽眉k harf duyarl谋l谋臒谋na ve karakter k谋s谋tlamalar谋na tabidir. 脰rne臒in, Windows b眉y眉k/k眉莽眉k harfe duyarl谋 de臒ildir, ancak macOS ve Linux de臒ildir.

IIS'de bar谋nd谋r谋lan ASP.NET Core uygulamalar谋, statik dosya istekleri de dahil olmak 眉zere t眉m istekleri uygulamaya iletmek i莽in ASP.NET 脟ekirdek Mod眉l眉n眉 kullan谋r. IIS statik dosya i艧leyicisi kullan谋lmaz ve istekleri i艧leme 艧ans谋 yoktur.

IIS statik dosya i艧leyicisini sunucu veya web sitesi d眉zeyinde kald谋rmak i莽in IIS Y枚neticisi'nde a艧a臒谋daki ad谋mlar谋 tamamlay谋n:

Mod眉ller 枚zelli臒ine gidin. Listede StaticFileModule 枚臒esini se莽in. Eylemler kenar 莽ubu臒unda Kald谋r'a t谋klay谋n.

Uyar谋

IIS statik dosya i艧leyicisi etkinse ve ASP.NET 脟ekirdek Mod眉l眉 yanl谋艧 yap谋land谋r谋ld谋ysa, statik dosyalar sunulur. Bu, 枚rne臒in web.config dosyas谋 da臒谋t谋lmad谋ysa ger莽ekle艧ir.

ve .cshtmldahil olmak 眉zere .cs kod dosyalar谋n谋 uygulama projesinin web k枚k眉n眉n d谋艧谋na yerle艧tirin. Bu nedenle uygulaman谋n istemci taraf谋 i莽eri臒iyle sunucu tabanl谋 kod aras谋nda mant谋ksal bir ayr谋m olu艧turulur. Bu, sunucu taraf谋 kodun s谋zd谋r谋lmas谋n谋 枚nler. IWebHostEnvironment.WebRootPath'i g眉ncelle艧tirerek wwwroot d谋艧谋nda dosya sunma

d谋艧谋nda IWebHostEnvironment.WebRootPath bir klas枚re wwwrootayarland谋臒谋nda:

Geli艧tirme ortam谋nda, hem hem de wwwroot g眉ncelle艧tirilmi艧 IWebHostEnvironment.WebRootPath i莽inde bulunan statik varl谋klar'dan wwwrootsunulur. Geli艧tirme d谋艧谋ndaki herhangi bir ortamda, g眉ncelle艧tirilmi艧 IWebHostEnvironment.WebRootPath klas枚rden yinelenen statik varl谋klar sunulur.

Bo艧 web 艧ablonuyla olu艧turulmu艧 bir web uygulamas谋n谋 d眉艧眉n眉n:

ve wwwroot-customi莽inde wwwroot bir Index.html dosya i莽erir.

Ayarlayan WebRootPath = "wwwroot-custom"a艧a臒谋daki g眉ncelle艧tirilmi艧 Program.cs dosyayla:

var builder = WebApplication.CreateBuilder(new WebApplicationOptions { Args = args, // Look for static files in "wwwroot-custom" WebRootPath = "wwwroot-custom" }); var app = builder.Build(); app.UseDefaultFiles(); app.UseStaticFiles(); app.Run();

Yukar谋daki kodda, istekleri:/

Geli艧tirme ortam谋nda d枚n眉艧 wwwroot/Index.html Geli艧tirme getirisi d谋艧谋ndaki herhangi bir ortamda wwwroot-custom/Index.html

varl谋klar谋n谋n wwwroot-custom d枚nd眉r眉lmesini sa臒lamak i莽in a艧a臒谋daki yakla艧谋mlardan birini kullan谋n:

i莽indeki wwwrootyinelenen adland谋r谋lm谋艧 varl谋klar谋 silin.

Properties/launchSettings.json d谋艧谋nda bir de臒ere "Development"ayarlay谋n"ASPNETCORE_ENVIRONMENT".

Proje dosyas谋nda ayarlayarak false statik web varl谋klar谋n谋 tamamen devre d谋艧谋 b谋rak谋n. UYARI, statik web varl谋klar谋n谋 devre d谋艧谋 b谋rakmak S谋n谋f Kitapl谋klar谋n谋 Razordevre d谋艧谋 b谋rak谋r.

Proje dosyas谋na a艧a臒谋daki JSON 枚臒esini ekleyin:

A艧a臒谋daki kod geli艧tirme olmayan bir de臒ere g眉ncelle艧tirilir IWebHostEnvironment.WebRootPath ve yerine yinelenen i莽eri臒in d枚nd眉r眉lme wwwroot-customwwwrootgarantisi verilir:

var builder = WebApplication.CreateBuilder(new WebApplicationOptions { Args = args, // Examine Hosting environment: logging value EnvironmentName = Environments.Staging, WebRootPath = "wwwroot-custom" }); var app = builder.Build(); app.Logger.LogInformation("ASPNETCORE_ENVIRONMENT: {env}", Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT")); app.Logger.LogInformation("app.Environment.IsDevelopment(): {env}", app.Environment.IsDevelopment().ToString()); app.UseDefaultFiles(); app.UseStaticFiles(); app.Run(); Ek kaynaklar 脰rnek kodu g枚r眉nt眉leme veya indirme (indirme) Ara Yaz谋l谋m ASP.NET Core'a giri艧

Yay谋mlayanlar Rick Anderson ve Kirk Larkin

HTML, CSS, g枚r眉nt眉ler ve JavaScript gibi statik dosyalar, ASP.NET Core uygulamas谋n谋n varsay谋lan olarak istemcilere do臒rudan hizmet verdi臒i varl谋klard谋r.

脰rnek kodu g枚r眉nt眉leme veya indirme (indirme)

Statik dosyalar谋 sunma

Statik dosyalar projenin web k枚k dizininde depolan谋r. Varsay谋lan dizin 艧eklindedir {content root}/wwwroot, ancak y枚ntemiyle UseWebRoot de臒i艧tirilebilir. Daha fazla bilgi i莽in bkz . 陌莽erik k枚k眉 ve Web k枚k眉.

CreateDefaultBuilder y枚ntemi, i莽erik k枚k眉n眉 ge莽erli dizine ayarlar:

public class Program { public static void Main(string[] args) { CreateHostBuilder(args).Build().Run(); } public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup(); }); }

Yukar谋daki kod web uygulamas谋 艧ablonuyla olu艧turulmu艧tur.

Statik dosyalara web k枚k眉ne g枚re bir yol 眉zerinden eri艧ilebilir. 脰rne臒in, Web Uygulamas谋 proje 艧ablonlar谋 klas枚r眉n i莽inde wwwroot birka莽 klas枚r i莽erir:

wwwroot css js lib

wwwroot/images klas枚r眉n眉 olu艧turmay谋 ve dosyay谋 eklemeyi wwwroot/images/MyImage.jpg g枚z 枚n眉nde bulundurun. klas枚r眉ndeki images bir dosyaya eri艧mek i莽in URI bi莽imi 艧eklindedir https:///images/. 脰rne臒in https://localhost:5001/images/MyImage.jpg

Dosyalar谋 web k枚k眉nde sunma

Varsay谋lan web uygulamas谋 艧ablonlar谋, Startup.Configurestatik dosyalar谋n hizmet vermesine olanak tan谋yan y枚ntemini 莽a臒谋r谋rUseStaticFiles:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } else { app.UseExceptionHandler("/Home/Error"); app.UseHsts(); } app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseRouting(); app.UseAuthorization(); app.UseEndpoints(endpoints => { endpoints.MapDefaultControllerRoute(); }); }

Parametresiz UseStaticFiles y枚ntem a艧谋r谋 y眉klemesi web k枚k眉ndeki dosyalar谋 servable olarak i艧aretler. A艧a臒谋daki i艧aretleme ba艧vurur wwwroot/images/MyImage.jpg:

Yukar谋daki kodda tilde karakteri ~/ web k枚k眉n眉 i艧aret ediyor.

Dosyalar谋 web k枚k眉 d谋艧谋nda sunma

Hizmet al谋nacak statik dosyalar谋n web k枚k眉 d谋艧谋nda bulundu臒u bir dizin hiyerar艧isi d眉艧眉n眉n:

wwwroot css images js MyStaticFiles images red-rose.jpg

bir istek, Statik Dosya Ara Yaz谋l谋m谋n谋 a艧a臒谋daki gibi yap谋land谋rarak dosyaya eri艧ebilir red-rose.jpg :

public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } else { app.UseExceptionHandler("/Home/Error"); app.UseHsts(); } app.UseHttpsRedirection(); // using Microsoft.Extensions.FileProviders; // using System.IO; app.UseStaticFiles(new StaticFileOptions { FileProvider = new PhysicalFileProvider( Path.Combine(env.ContentRootPath, "MyStaticFiles")), RequestPath = "/StaticFiles" }); app.UseRouting(); app.UseAuthorization(); app.UseEndpoints(endpoints => { endpoints.MapDefaultControllerRoute(); }); }

Yukar谋daki kodda MyStaticFiles dizin hiyerar艧isi StaticFiles URI kesimi arac谋l谋臒谋yla genel kullan谋ma sunulur. Dosyaya hizmet red-rose.jpg verme https:///StaticFiles/images/red-rose.jpg iste臒i.

A艧a臒谋daki i艧aretleme ba艧vurur MyStaticFiles/images/red-rose.jpg:

HTTP yan谋t 眉st bilgilerini ayarlama

Nesne StaticFileOptions , HTTP yan谋t 眉st bilgilerini ayarlamak i莽in kullan谋labilir. Web k枚k眉nden statik dosya sunumunu yap谋land谋rmaya ek olarak, a艧a臒谋daki kod 眉st bilgiyi ayarlarCache-Control:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } else { app.UseExceptionHandler("/Home/Error"); app.UseHsts(); } app.UseHttpsRedirection(); const string cacheMaxAge = "604800"; app.UseStaticFiles(new StaticFileOptions { OnPrepareResponse = ctx => { // using Microsoft.AspNetCore.Http; ctx.Context.Response.Headers.Append( "Cache-Control", $"public, max-age={cacheMaxAge}"); } }); app.UseRouting(); app.UseAuthorization(); app.UseEndpoints(endpoints => { endpoints.MapDefaultControllerRoute(); }); }

Yukar谋daki kod maksimum ya艧谋 604800 saniye (7 g眉n) olarak ayarlar.

Statik dosya yetkilendirme

ASP.NET Core 艧ablonlar谋 莽a臒r谋s谋ndan 枚nce 枚臒esini 莽a臒谋r谋r UseStaticFilesUseAuthorization. 脟o臒u uygulama bu deseni izler. Statik Dosya Ara Yaz谋l谋m谋 yetkilendirme ara yaz谋l谋m谋ndan 枚nce 莽a臒r谋ld谋臒谋nda:

Statik dosyalarda yetkilendirme denetimi yap谋lmaz. Statik Dosya Ara Yaz谋l谋m谋 taraf谋ndan sunulan statik dosyalara( 枚rne臒in, alt谋ndakilere wwwroot) genel eri艧im sa臒lan谋r.

Yetkilendirmeye dayal谋 statik dosyalar sunmak i莽in:

Bunlar谋 d谋艧谋nda wwwrootdepolay谋n. 莽a臒r谋s谋 UseStaticFilesyapt谋ktan sonra bir yol belirterek 莽a臒r谋s谋nda bulunur UseAuthorization. Geri d枚n眉艧 yetkilendirme ilkesini ayarlay谋n. public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); app.UseDatabaseErrorPage(); } else { app.UseExceptionHandler("/Error"); app.UseHsts(); } app.UseHttpsRedirection(); // wwwroot css, JavaScript, and images don't require authentication. app.UseStaticFiles(); app.UseRouting(); app.UseAuthentication(); app.UseAuthorization(); app.UseStaticFiles(new StaticFileOptions { FileProvider = new PhysicalFileProvider( Path.Combine(env.ContentRootPath, "MyStaticFiles")), RequestPath = "/StaticFiles" }); app.UseEndpoints(endpoints => { endpoints.MapRazorPages(); }); } public class Startup { public Startup(IConfiguration configuration) { Configuration = configuration; } public IConfiguration Configuration { get; } public void ConfigureServices(IServiceCollection services) { services.AddDbContext(options => options.UseSqlServer( Configuration.GetConnectionString("DefaultConnection"))); services.AddDefaultIdentity(options => options.SignIn.RequireConfirmedAccount = true) .AddEntityFrameworkStores(); services.AddRazorPages(); services.AddAuthorization(options => { options.FallbackPolicy = new AuthorizationPolicyBuilder() .RequireAuthenticatedUser() .Build(); }); } // Remaining code ommitted for brevity.

脰nceki kodda, geri d枚n眉艧 yetkilendirme ilkesi t眉m kullan谋c谋lar谋n kimli臒inin do臒rulanmas谋 gerekir. Kendi yetkilendirme gereksinimlerini belirten denetleyiciler, Razor Sayfalar gibi u莽 noktalar geri d枚n眉艧 yetkilendirme ilkesini kullanmaz. 脰rne臒in Sayfalar, Razor denetleyiciler veya eylem y枚ntemleri geri [AllowAnonymous][Authorize(PolicyName="MyPolicy")] d枚n眉艧 yetkilendirme ilkesi yerine uygulanan yetkilendirme 枚zniteli臒ini kullan谋r.

RequireAuthenticatedUser ge莽erli kullan谋c谋n谋n kimli臒inin do臒ruland谋臒谋n谋 zorlayan ge莽erli 枚rne臒e ekler DenyAnonymousAuthorizationRequirement .

varsay谋lan Statik Dosya Ara Yaz谋l谋m谋 (app.UseStaticFiles();) 枚ncesinde UseAuthentication莽a臒r谋ld谋臒谋ndan alt谋ndaki wwwroot statik varl谋klara genel eri艧im sa臒lan谋r. MyStaticFiles klas枚r眉ndeki statik varl谋klar kimlik do臒rulamas谋 gerektirir. 脰rnek kod bunu g枚sterir.

Dosyalar谋 yetkilendirmeye g枚re sunmak i莽in alternatif bir yakla艧谋m:

Bunlar谋 ve Statik Dosya Ara Yaz谋l谋m谋 taraf谋ndan eri艧ilebilen herhangi bir dizinin d谋艧谋nda wwwroot depolay谋n. Yetkilendirmenin uyguland谋臒谋 bir eylem y枚ntemi arac谋l谋臒谋yla bunlar谋 sunma ve bir FileResult nesne d枚nd眉rme: [Authorize] public IActionResult BannerImage() { var filePath = Path.Combine( _env.ContentRootPath, "MyStaticFiles", "images", "red-rose.jpg"); return PhysicalFile(filePath, "image/jpeg"); } Dizin tarama

Dizin g枚zatma, belirtilen dizinler i莽inde dizin listelemeye izin verir.

Dizine g枚zatma, g眉venlik nedeniyle varsay谋lan olarak devre d谋艧谋d谋r. Daha fazla bilgi i莽in bkz . Statik dosyalar i莽in g眉venlikle ilgili dikkat edilmesi gerekenler.

Dizine g枚zatmay谋 艧u 艧ekilde etkinle艧tirin:

AddDirectoryBrowseri莽inde .Startup.ConfigureServices UseDirectoryBrowseri莽inde .Startup.Configure public void ConfigureServices(IServiceCollection services) { services.AddControllersWithViews(); services.AddDirectoryBrowser(); } public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } else { app.UseExceptionHandler("/Home/Error"); app.UseHsts(); } app.UseHttpsRedirection(); // using Microsoft.Extensions.FileProviders; // using System.IO; app.UseStaticFiles(new StaticFileOptions { FileProvider = new PhysicalFileProvider( Path.Combine(env.WebRootPath, "images")), RequestPath = "/MyImages" }); app.UseDirectoryBrowser(new DirectoryBrowserOptions { FileProvider = new PhysicalFileProvider( Path.Combine(env.WebRootPath, "images")), RequestPath = "/MyImages" }); app.UseRouting(); app.UseAuthorization(); app.UseEndpoints(endpoints => { endpoints.MapDefaultControllerRoute(); }); }

Yukar谋daki kod, url'sini https:///MyImageskullanarak wwwroot/images klas枚r眉n眉n dizine g枚zat谋lmas谋na olanak tan谋r ve her dosya ve klas枚re ba臒lant谋 sa臒lar:

Varsay谋lan belgeleri sunma

Varsay谋lan sayfay谋 ayarlamak, ziyaret莽ilere sitede bir ba艧lang谋莽 noktas谋 sa臒lar. 陌stek URL'sinin wwwroot dosyan谋n ad谋n谋 i莽ermesine gerek kalmadan dosyas谋ndan varsay谋lan bir dosya sunmak i莽in y枚ntemini 莽a臒谋r谋n UseDefaultFiles :

public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } else { app.UseExceptionHandler("/Home/Error"); app.UseHsts(); } app.UseHttpsRedirection(); app.UseDefaultFiles(); app.UseStaticFiles(); app.UseRouting(); app.UseAuthorization(); app.UseEndpoints(endpoints => { endpoints.MapDefaultControllerRoute(); }); }

UseDefaultFiles varsay谋lan dosyaya hizmet vermek i莽in 枚nce UseStaticFiles 莽a臒r谋lmal谋d谋r. UseDefaultFiles , dosyaya hizmet i莽ermeyen bir URL yeniden yazma i艧lemidir.

ile UseDefaultFiles, a艧a臒谋dakiler i莽in arama yap谋lan bir klas枚re istekte bulunur wwwroot :

default.htm default.html index.htm index.html

Listeden bulunan ilk dosya, istek dosyan谋n ad谋n谋 i莽eriyormu艧 gibi sunulur. Taray谋c谋 URL'si istenen URI'yi yans谋tmaya devam eder.

A艧a臒谋daki kod, varsay谋lan dosya ad谋n谋 olarak mydefault.htmlde臒i艧tirir:

var options = new DefaultFilesOptions(); options.DefaultFileNames.Clear(); options.DefaultFileNames.Add("mydefault.html"); app.UseDefaultFiles(options); app.UseStaticFiles();

A艧a臒谋daki kod, 枚nceki kodla birlikte g枚sterilir Startup.Configure :

public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } else { app.UseExceptionHandler("/Home/Error"); app.UseHsts(); } app.UseHttpsRedirection(); var options = new DefaultFilesOptions(); options.DefaultFileNames.Clear(); options.DefaultFileNames.Add("mydefault.html"); app.UseDefaultFiles(options); app.UseStaticFiles(); app.UseRouting(); app.UseAuthorization(); app.UseEndpoints(endpoints => { endpoints.MapDefaultControllerRoute(); }); } Varsay谋lan belgeler i莽in UseFileServer

UseFileServer, UseDefaultFilesve i艧levlerini UseStaticFilesiste臒e ba臒l谋 olarak UseDirectoryBrowserbirle艧tirir.

Statik dosyalar谋n ve varsay谋lan dosyan谋n sunulmas谋n谋 etkinle艧tirmek i莽in 莽a臒r谋s谋 app.UseFileServer . Dizine g枚zatma etkin de臒il. A艧a臒谋daki kod ile UseFileServerg枚sterilirStartup.Configure:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } else { app.UseExceptionHandler("/Home/Error"); app.UseHsts(); } app.UseHttpsRedirection(); app.UseFileServer(); app.UseRouting(); app.UseAuthorization(); app.UseEndpoints(endpoints => { endpoints.MapDefaultControllerRoute(); }); }

A艧a臒谋daki kod statik dosyalar谋n, varsay谋lan dosyan谋n ve dizin taraman谋n sunulmas谋n谋 sa臒lar:

app.UseFileServer(enableDirectoryBrowsing: true);

A艧a臒谋daki kod, 枚nceki kodla birlikte g枚sterilir Startup.Configure :

public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } else { app.UseExceptionHandler("/Home/Error"); app.UseHsts(); } app.UseHttpsRedirection(); app.UseFileServer(enableDirectoryBrowsing: true); app.UseRouting(); app.UseAuthorization(); app.UseEndpoints(endpoints => { endpoints.MapDefaultControllerRoute(); }); }

A艧a臒谋daki dizin hiyerar艧isini g枚z 枚n眉nde bulundurun:

wwwroot css images js MyStaticFiles images MyImage.jpg default.html

A艧a臒谋daki kod statik dosyalar谋n sunulmas谋n谋, varsay谋lan dosyan谋n ve dizinine g枚z atmay谋 MyStaticFilesetkinle艧tirir:

public void ConfigureServices(IServiceCollection services) { services.AddControllersWithViews(); services.AddDirectoryBrowser(); } public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } else { app.UseExceptionHandler("/Home/Error"); app.UseHsts(); } app.UseHttpsRedirection(); app.UseStaticFiles(); // For the wwwroot folder. // using Microsoft.Extensions.FileProviders; // using System.IO; app.UseFileServer(new FileServerOptions { FileProvider = new PhysicalFileProvider( Path.Combine(env.ContentRootPath, "MyStaticFiles")), RequestPath = "/StaticFiles", EnableDirectoryBrowsing = true }); app.UseRouting(); app.UseAuthorization(); app.UseEndpoints(endpoints => { endpoints.MapDefaultControllerRoute(); }); }

AddDirectoryBrowser 枚zellik de臒eri oldu臒unda EnableDirectoryBrowsingtrue莽a臒r谋lmal谋d谋r.

Dosya hiyerar艧isini ve 枚nceki kodu kullanarak URL'ler a艧a臒谋daki gibi 莽枚z眉mlenir:

URI Response https:///StaticFiles/images/MyImage.jpg MyStaticFiles/images/MyImage.jpg https:///StaticFiles MyStaticFiles/default.html

MyStaticFiles dizininde varsay谋lan adland谋r谋lm谋艧 dosya yoksa, https:///StaticFiles t谋klanabilir ba臒lant谋larla dizin listesini d枚nd眉r眉r:

UseDefaultFiles ve UseDirectoryBrowser sonunda bir ile hedef URI'ye iz b谋rakmadan / hedef URI'den istemci taraf谋 yeniden y枚nlendirmesi ger莽ekle艧tirin /. 脰rne臒in, uygulamas谋ndan https:///StaticFiles 枚臒esine.https:///StaticFiles/ StaticFiles dizinindeki g枚reli URL'ler , sonunda e臒ik 莽izgi (/ ) olmadan ge莽ersizdir.

FileExtensionContentTypeProvider

s谋n谋f谋, FileExtensionContentTypeProvider dosya uzant谋lar谋n谋n MIME i莽erik t眉rlerine e艧lemesi olarak hizmet veren bir Mappings 枚zellik i莽erir. A艧a臒谋daki 枚rnekte, bilinen MIME t眉rlerine birka莽 dosya uzant谋s谋 e艧lenmi艧tir. .rtf uzant谋s谋 de臒i艧tirilir ve .mp4 kald谋r谋l谋r:

// using Microsoft.AspNetCore.StaticFiles; // using Microsoft.Extensions.FileProviders; // using System.IO; // Set up custom content types - associating file extension to MIME type var provider = new FileExtensionContentTypeProvider(); // Add new mappings provider.Mappings[".myapp"] = "application/x-msdownload"; provider.Mappings[".htm3"] = "text/html"; provider.Mappings[".image"] = "image/png"; // Replace an existing mapping provider.Mappings[".rtf"] = "application/x-msdownload"; // Remove MP4 videos. provider.Mappings.Remove(".mp4"); app.UseStaticFiles(new StaticFileOptions { FileProvider = new PhysicalFileProvider( Path.Combine(env.WebRootPath, "images")), RequestPath = "/MyImages", ContentTypeProvider = provider }); app.UseDirectoryBrowser(new DirectoryBrowserOptions { FileProvider = new PhysicalFileProvider( Path.Combine(env.WebRootPath, "images")), RequestPath = "/MyImages" });

A艧a臒谋daki kod, 枚nceki kodla birlikte g枚sterilir Startup.Configure :

public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } else { app.UseExceptionHandler("/Home/Error"); app.UseHsts(); } app.UseHttpsRedirection(); // using Microsoft.AspNetCore.StaticFiles; // using Microsoft.Extensions.FileProviders; // using System.IO; // Set up custom content types - associating file extension to MIME type var provider = new FileExtensionContentTypeProvider(); // Add new mappings provider.Mappings[".myapp"] = "application/x-msdownload"; provider.Mappings[".htm3"] = "text/html"; provider.Mappings[".image"] = "image/png"; // Replace an existing mapping provider.Mappings[".rtf"] = "application/x-msdownload"; // Remove MP4 videos. provider.Mappings.Remove(".mp4"); app.UseStaticFiles(new StaticFileOptions { FileProvider = new PhysicalFileProvider( Path.Combine(env.WebRootPath, "images")), RequestPath = "/MyImages", ContentTypeProvider = provider }); app.UseDirectoryBrowser(new DirectoryBrowserOptions { FileProvider = new PhysicalFileProvider( Path.Combine(env.WebRootPath, "images")), RequestPath = "/MyImages" }); app.UseRouting(); app.UseAuthorization(); app.UseEndpoints(endpoints => { endpoints.MapDefaultControllerRoute(); }); }

Bkz. MIME i莽erik t眉rleri.

Standart olmayan i莽erik t眉rleri

Statik Dosya Ara Yaz谋l谋m谋, neredeyse 400 bilinen dosya i莽erik t眉r眉n眉 anlar. Kullan谋c谋 bilinmeyen bir dosya t眉r眉ne sahip bir dosya isterse, Statik Dosya Ara Yaz谋l谋m谋 iste臒i i艧lem hatt谋ndaki bir sonraki ara yaz谋l谋ma ge莽irir. 陌ste臒i i艧leyen ara yaz谋l谋m yoksa 404 Bulunamad谋 yan谋t谋 d枚nd眉r眉l眉r. Dizine g枚zatma etkinse, dizin listesinde dosyan谋n ba臒lant谋s谋 g枚r眉nt眉lenir.

A艧a臒谋daki kod bilinmeyen t眉rlerin sunulmas谋n谋 sa臒lar ve bilinmeyen dosyay谋 g枚r眉nt眉 olarak i艧ler:

app.UseStaticFiles(new StaticFileOptions { ServeUnknownFileTypes = true, DefaultContentType = "image/png" });

A艧a臒谋daki kod, 枚nceki kodla birlikte g枚sterilir Startup.Configure :

public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } else { app.UseExceptionHandler("/Home/Error"); app.UseHsts(); } app.UseHttpsRedirection(); app.UseStaticFiles(new StaticFileOptions { ServeUnknownFileTypes = true, DefaultContentType = "image/png" }); app.UseRouting(); app.UseAuthorization(); app.UseEndpoints(endpoints => { endpoints.MapDefaultControllerRoute(); }); }

Yukar谋daki kodla, bilinmeyen i莽erik t眉r眉ne sahip bir dosya iste臒i g枚r眉nt眉 olarak d枚nd眉r眉l眉r.

Uyar谋

ServeUnknownFileTypes Etkinle艧tirme bir g眉venlik riskidir. Varsay谋lan olarak devre d谋艧谋d谋r ve kullan谋m谋 枚nerilmez. FileExtensionContentTypeProvider , standart olmayan uzant谋larla dosya sunman谋n daha g眉venli bir alternatifidir.

Dosyalar谋 birden 莽ok konumdan sunma

UseStaticFiles ve UseFileServer varsay谋lan olarak 枚臒esini i艧aret eden dosya sa臒lay谋c谋s谋na t谋klay谋n wwwroot. Ve'nin UseStaticFilesUseFileServer ek 枚rnekleri, di臒er konumlardaki dosyalar谋 sunmak i莽in di臒er dosya sa臒lay谋c谋lar谋yla birlikte sa臒lanabilir. Daha fazla bilgi i莽in bu GitHub konusuna bak谋n.

Statik dosyalar i莽in g眉venlikle ilgili dikkat edilmesi gerekenler

Uyar谋

UseDirectoryBrowser ve UseStaticFiles gizli dizileri s谋zd谋rabilir. 脺retimde dizine g枚zatmay谋 devre d谋艧谋 b谋rakmak kesinlikle 枚nerilir. veya UseDirectoryBrowserarac谋l谋臒谋yla UseStaticFiles hangi dizinlerin etkinle艧tirildi臒ini dikkatle g枚zden ge莽irin. T眉m dizin ve alt dizinleri genel olarak eri艧ilebilir hale gelir. Genel kullan谋ma sunulmas谋 i莽in uygun dosyalar谋 gibi /wwwrootayr谋lm谋艧 bir dizinde depolay谋n. Bu dosyalar谋 MVC g枚r眉n眉mlerinden, Sayfalardan, Razor yap谋land谋rma dosyalar谋ndan vb. ay谋r谋n.

ile UseDirectoryBrowserUseStaticFiles kullan谋ma sunulan i莽erik URL'leri, temel al谋nan dosya sisteminin b眉y眉k/k眉莽眉k harf duyarl谋l谋臒谋na ve karakter k谋s谋tlamalar谋na tabidir. 脰rne臒in, Windows b眉y眉k/k眉莽眉k harfe duyarl谋 de臒ildir, ancak macOS ve Linux de臒ildir.

IIS'de bar谋nd谋r谋lan ASP.NET Core uygulamalar谋, statik dosya istekleri de dahil olmak 眉zere t眉m istekleri uygulamaya iletmek i莽in ASP.NET 脟ekirdek Mod眉l眉n眉 kullan谋r. IIS statik dosya i艧leyicisi kullan谋lmaz ve istekleri i艧leme 艧ans谋 yoktur.

IIS statik dosya i艧leyicisini sunucu veya web sitesi d眉zeyinde kald谋rmak i莽in IIS Y枚neticisi'nde a艧a臒谋daki ad谋mlar谋 tamamlay谋n:

Mod眉ller 枚zelli臒ine gidin. Listede StaticFileModule 枚臒esini se莽in. Eylemler kenar 莽ubu臒unda Kald谋r'a t谋klay谋n.

Uyar谋

IIS statik dosya i艧leyicisi etkinse ve ASP.NET 脟ekirdek Mod眉l眉 yanl谋艧 yap谋land谋r谋ld谋ysa, statik dosyalar sunulur. Bu, 枚rne臒in web.config dosyas谋 da臒谋t谋lmad谋ysa ger莽ekle艧ir.

ve .cshtmldahil olmak 眉zere .cs kod dosyalar谋n谋 uygulama projesinin web k枚k眉n眉n d谋艧谋na yerle艧tirin. Bu nedenle uygulaman谋n istemci taraf谋 i莽eri臒iyle sunucu tabanl谋 kod aras谋nda mant谋ksal bir ayr谋m olu艧turulur. Bu, sunucu taraf谋 kodun s谋zd谋r谋lmas谋n谋 枚nler. Ek kaynaklar Ara Yaz谋l谋m ASP.NET Core'a giri艧


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有